2009-06-14 15 views
1

Ich versuche, einige Informationen, die ich aus einer Datenbank abgerufen habe, zwischenzuspeichern. Ich habe mich entschieden, eine statische Liste <> Mitglied zu verwenden, um die Informationen zu speichern. Ich weiß aus meiner Erfahrung mit der Liste <> in Multithread-Anwendungen, dass ich den Zugriff darauf mit der Lock-Anweisung schützen muss. Behandle ich jeden Code in meinem Asp.Net-Code genau so? Funktioniert die Lock-Anweisung noch?ASP.Net statische Objekte

Antwort

2

Sperre funktioniert. Beachten Sie, dass bei mehreren Worker-Prozessen mehrere Versionen der Liste angezeigt werden. Jeder von ihnen wird durch sein eigenes Schloss geschützt.

Eine ziemlich reale Gefahr hier ist, dass, wenn Sie die Sperre nicht freigeben, Ihre gesamte Webanwendung hängen kann. Ein Benutzer wird möglicherweise getrennt, während Ihre ASP.NET-Seite ausgeführt wird. Seien Sie vorsichtig bei Ausnahmen, die zu unerwarteten Zeiten ausgelöst werden.

+0

Ist das möglich? Ich hatte den Eindruck, dass lock() {} garantiert, dass die Sperre aufgehoben wird. Wissen Sie oder wissen Sie zumindest, wo ich herausfinden kann, wie oft ASP.Net einen neuen Thread für eine Anfrage erstellt, im Gegensatz zu einem völlig neuen Prozess? –

+0

Zustimmen lock() {} würde die Lock-Version garantieren. Sie können die Anzahl der Prozesse in IIS in den Einstellungen des Anwendungspools unter "Maximale Arbeitsprozesse" konfigurieren. Der Standardwert ist 1, was bedeutet, dass es nur einen Prozess gibt. – Andomar

+0

Alles klar, danke! +1 –

5

Eine Lock-Anweisung um List-Methode würde definitiv funktionieren, aber wenn Sie Caching-Funktionalität in Ihrer ASP.NET-Anwendung benötigen, würde ich empfehlen, Cache Klasse, die für diese Funktionalität angepasst ist.

+0

Danke! Ich werde das untersuchen. +1 –

Verwandte Themen