7 Stimmen

ASP.NET: Wo/wie wird web.config zwischengespeichert?

Ich habe irgendwo in der Microsoft Dokumentation gelesen, dass der Inhalt des ASP.NET's web.config wird zwischengespeichert . Wenn das wahr ist, wobei ist es zwischengespeichert - in Speicher oder auf Festplatte ?

Und eine Folgefrage: Gibt es irgendwelche Leistungsüberlegungen, die ich anstellen muss, wenn ich intensiv auf die web.config zugreifen muss?

8voto

AnthonyWJones Punkte 182582

Es wird im Speicher zwischengespeichert, das Zwischenspeichern auf der Festplatte macht keinen Sinn, es ist bereits auf der Festplatte.

In ASP.NET müssen Sie zunächst sicherstellen, dass der Zugriff auf die Konfigurationsabschnitte über das HttpContext-Objekt GetSection Methode (diese verwendet die von ASP.NET verwalteten Cache-Kopien).

Die Leistung beim Zugriff auf Konfigurationswerte hängt von der internen Implementierung des Section-Objekts ab (das von GetSection zurückgegebene Objekt). A ConfigurationSection kann einfach als Wrapper für einen DOM-Knoten fungieren, den es bei jeder Anfrage nach einer Eigenschaft lesen kann. ODER er könnte den Wert intern zwischenspeichern und auf Änderungen achten.

Mein Rat wäre, den Code einfach zu halten und nur auf die Werte zuzugreifen, die Sie über GetSection anstatt zu versuchen, Kopien von ihnen an anderer Stelle zu speichern, aber auf jeden Fall einen Verweis auf das Objekt zu erhalten, das von GetSection für die Dauer einer Anfrage, wenn Sie mehrere Werte daraus abrufen wollen.

0 Stimmen

Auf der Festplatte könnte es in einer seriellen Form sein... okay, okay, das ist albern, ich weiß. Ich habe nicht nachgedacht, als ich das schrieb... :-)

0 Stimmen

Warten Sie ... bin ich verrückt? Ich schaue mir HttpContext.GetSection im RedGate-Reflektor an, und es sieht so aus, als ob es ConfigurationManager.GetSection intern aufruft, was nicht so aussieht, als ob es etwas zwischenspeichert. Bitte lassen Sie mich wissen, wenn ich etwas übersehen habe.

0 Stimmen

@Dan: Sie geben nicht an, um welche Version es sich handelt, die 2.0.0.0 greift jedoch auf ConfigurationManager aber in diesem Zusammenhang wird die CachedPathData um den Abschnitt zu erhalten. Der Grund dafür ist, dass es viele sein können web.config Dateien (eine in jedem Ordner des aktuellen Pfades), wird der tatsächliche Zustand der Konfiguration, die für einen Pfad präsentiert werden soll, aus allen diesen Dateien zusammengesetzt.

5voto

victor_c Punkte 171

In ASP.NET wird die <appSettings> Abschnitt wird im Speicher zwischengespeichert nach dem 1. Zugriff :

ASP.NET startet die Anwendung neu, wenn die Datei web.config aktualisiert wird.

1voto

Michiel Overeem Punkte 3704

Ich denke, dass die web.config im Speicher zwischengespeichert wird (in Objektinstanzen von System.Web.Configuration). Diese werden neu geladen, wenn die .config-Datei geändert wird (und somit Ihre Webanwendung neu geladen wird).

Es ist unwahrscheinlich, dass diese Objekte zu Leistungsengpässen führen. Wenn Sie jedoch Parsing usw. durchführen müssen, möchten Sie die geparsten Objekte vielleicht behalten.

[Extra] Ich gute Praxis (ich glaube, zumindest) ist, statische Eigenschaften in Ihrem global.asax.cs-Datei für Sie appsettings erstellen. Sie können diese Eigenschaften in der application_start-Methode instanziieren und sie in Ihrer Webanwendung verwenden. Dies verhindert, dass Sie hart kodierte Zeichenfolge (Konfigurationsschlüssel) in Ihrem Code verwenden.

1voto

Jon Punkte 2075

Sie wird im Speicher zwischengespeichert. Die Zwischenspeicherung auf der Festplatte macht nicht viel Sinn für etwas, auf das häufig zugegriffen wird und das bereits in einem Format vorliegt, in dem man es in eine einfach zu speichernde Datenstruktur umwandeln kann. Mein Ratschlag wäre, frei darauf zuzugreifen, da es genauso schnell sein wird wie jedes andere System, das Sie sich für die Speicherung ausdenken, und wahrscheinlich sogar schneller.

0voto

Shirish Patel Punkte 48

Ich bin absolut nicht der Meinung, dass web.config-Werte zwischengespeichert werden. Der IIS greift ständig auf sie zu.

Ich habe etwa 30 AppSettings Keys in meiner web.config.

z.B.

<appSettings>
        <add key="ProductImageFileType" value=".jpg|.jpeg|.gif|.png" />
</appSettings>

In meinem ASP.Net C# Code habe ich

string ValidateType = ConfigurationManager.AppSettings["ProductImageFileType"].ToString();

In der folgenden Abbildung wird die Anzahl der web.config-Lesungen angezeigt, die jede Sekunde steigt.

enter image description here

Ich empfehle, die Werte von ConfigurationManager.AppSettings während Application_Start abzurufen und die Schlüssel-Wert-Paare in einem globalen Wörterbuch zu speichern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X