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
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.
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.
Danke! Ich werde das untersuchen. +1 –
Es hängt davon ab, ob Sie die Liste ändern werden. Hier ist eine gute Diskussion zu diesem Thema: Do i need a lock on a list? C#
- 1. Statische ArrayList-Objekte serialisieren
- 2. C++ statische globale Objekte Workarounds?
- 3. Statische Methoden in ASP.NET
- 4. Statische Funktion Parallelität ASP.NET
- 5. Statische Variablen in ASP.NET
- 6. PHP: Statische und nicht statische Funktionen und Objekte
- 7. ASP.NET und Objekte
- 8. Asp.net XML-Objekte
- 9. statische Instanzvariable für mehrere Objekte - C++
- 10. PHPUnit Mock-Objekte und statische Methoden
- 11. Statische abstrakte Objekte mit virtuellen Methoden
- 12. ASP.NET Themes und statische Inhalte
- 13. Caching große Objekte für asp.net Website
- 14. ASP.NET C# Statische Variablen sind global?
- 15. Statische Dateien und Authentifizierung in ASP.net
- 16. ASP.NET MVC Wie sicher sind statische Variablen
- 17. Statische HttpClient Thread sicher auf ASP.net HttpRequest
- 18. Statische Methoden für Biz Schicht (ASP.Net)
- 19. try catch auf statische Funktion asp.net
- 20. Statische Felder in einem ASP.NET-Webdienst
- 21. Libtool erstellt nur statische Bibliothek - ich brauche gemeinsam genutzte Objekte
- 22. Verwirrt über nicht-statische Felder und JSON-Objekte
- 23. Null Initialisierung und statische Initialisierung des lokalen Bereichs statische Variable
- 24. Asp.net - Caching vs statische Variable zum Speichern eines Wörterbuchs
- 25. Wann sollten wir statische Funktion in asp.net Klasse schreiben
- 26. Asp.Net Core Web Application statische Dateien gibt 404 unter Linux
- 27. BeginRequest feuert für statische Dateien in ASP.NET MVC App
- 28. Autorisierung für statische Dateien in ASP.NET MVC w/Owin
- 29. ASP.NET Setup-Projekt - wie statische Dateien nicht in VS enthalten?
- 30. Zugriff auf die Sitzung in ASP.NET Core über statische Variable?
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? –
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
Alles klar, danke! +1 –