2010-02-24 5 views
13

Wir verwenden die HttpRuntime.Cache-API in einem ASP.NET zum Zwischenspeichern von aus einer Datenbank abgerufenen Daten.Maximale Länge der Cache-Schlüssel in HttpRuntime.Cache-Objekt?

Für diese spezielle Anwendung, zeichnen sich durch unsere Datenbankabfragen eine Vielzahl von Parametern, so dass unsere Cache-Schlüssel wie folgt aussehen:

table = table1; param1 = somevalue1; param2 = somevalue2; param3 = somevalue3; param4 = somevalue4; param5 = somevalue5; param6 = somevalue6 ... etc ...

Für einige Anfragen, wir haben so viele Parameter, die die Cache-Schlüssel mehrere hundert Zeichen lang ist.

Meine Frage: Gibt es eine Grenze für die Länge dieser Cache-Schlüssel? Intern verwendet es ein Wörterbuch, daher sollte die Nachschlagezeit theoretisch konstant sein. Ich frage mich jedoch, ob wir in der Lage sind, ein Performance/Memory-Problem zu lösen.

Antwort

19

Intern verwendet Dictionary den Hash-Code des Schlüssels, den Sie ihm geben. Effektiv wird jeder Schlüssel als Integer gespeichert.

Sie haben nichts zu befürchten.

+0

Als ein extremes Beispiel ... nehme an, dass mein Cache-Schlüssel 4K groß ist. Dies sind mehr Informationen, als in einer Ganzzahl gespeichert werden können. Wie kann das dann als Integer gespeichert werden und eindeutig sein? – frankadelic

+5

.NET verwendet einen Hashalgorithmus, um jede Zeichenfolge in eine einzelne Ganzzahl umzuwandeln (ähnlich wie MD5, außer dass der Hash in 4 Bytes passt). Dieser Algorithmus wurde wahrscheinlich für ein Gleichgewicht zwischen Geschwindigkeit und Eindeutigkeit ausgewählt, es treten jedoch Hash-Kollisionen auf. Das Wörterbuch behandelt diese Kollisionen automatisch. Für spezifische Details, überprüfen Sie den Hash-Tabelleneintrag in Wikipedia: http://en.wikipedia.org/wiki/Hash_table –