2010-11-28 4 views
12

Ich habe viele Anfragen, dass meine Web-Config-DateiCaching von WebConfigurationManager.AppSettings?

variable = WebConfigurationManager.AppSettings["BLAH"] 

Sie WebConfigurationManager.AppSettings Lese jedes Mal von der Festplatte gelesen oder wird es im Arbeitsspeicher zwischengespeichert?

Wenn es jedes Mal von Festplatte gelesen wird, dann muss ich die Variable in eine statische Variable verschieben, um die Leistung meiner App zu verbessern.

Antwort

17

Konfigurationseinstellungen werden im Speicher zwischengespeichert, und web.config wird nicht jedes Mal geparst, wenn Sie diese Funktion aufrufen.

+1

+1 hier ist ein Link zur Dokumentation. [Diese Member führen schreibgeschützte Operationen aus, verwenden eine einzelne zwischengespeicherte Instanz der Konfiguration und sind Multithread-fähig.] (Http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx#remarksToggle) – Craig

3

Ich habe gerade dieses Thema erforscht. Und es stimmt, dass die Konfigurationseinstellungen im Speicher zwischengespeichert werden.

Sie können jedoch immer noch einen Leistungsvorteil sehen, indem Sie die Werte in statischen Variablen speichern, wie Sie erwähnen (und wie beschrieben here). Dies ist, weil die AppSettings Sammlung eine NameValueCollection ist. Jedes Mal, wenn Sie eine AppSetting referenzieren, muss sie die Sammlung durchsuchen, die eine O (n) -Operation ist.

Obwohl dies wahrscheinlich eine seltene Sache ist, dass dies jemals ein Flaschenhals Ihrer Anwendung sein würde. Aber man könnte sich ein Szenario mit einer engen Schleife vorstellen, die auf einen einzelnen Wert in AppSettings verweist, wo die AppSettings-Sammlung sehr groß ist. In diesem Fall können Sie den Wert auch in irgendeiner Weise zwischenspeichern, auch wenn er einfach in einer lokalen Variablen gespeichert wird, bevor Sie die Schleife starten.