Erstellen dynamischer Sperren zur Laufzeit in ASP.NET

Sind die folgenden Annahmen für diesen Code gültig? Ich habe einige Hintergrundinformationen unter den Code gesetzt, aber ich denke nicht, dass dies relevant ist.

Annahme 1: Da es sich um eine einzelne Anwendung handelt, gehe ich davon aus, dass sie von einem einzelnen Prozess verarbeitet wird. Daher werden statische Variablen von Threads gemeinsam genutzt, und es ist gültig, meine Sammlung von Sperrobjekten statisch zu deklarieren.

Annahme 2: Wenn ich weiß, dass der Wert bereits im Wörterbuch enthalten ist, muss ich den Lesevorgang nicht sperren. Ich könnte ein ConcurrentDictionary verwenden, aber ich glaube, dieses wird sicher sein, da ich nicht aufzähle (oder lösche) und der Wert vorhanden ist und sich nicht ändert, wenn ich aufrufeUnlockOnValue().

Annahme 3: Ich kann die Keys-Auflistung sperren, da sich dieser Verweis nicht ändert, selbst wenn die zugrunde liegende Datenstruktur dies tut.

private static Dictionary<String,Object> LockList = 
    new Dictionary<string,object>();

private void LockOnValue(String queryStringValue)
{
    lock(LockList.Keys)
    {
        if(!LockList.Keys.Contains(queryStringValue))
        {
            LockList.Add(screenName,new Object());
        }
        System.Threading.Monitor.Enter(LockList[queryStringValue]);
    }
}

private void UnlockOnValue(String queryStringValue)
{
    System.Threading.Monitor.Exit(LockList[queryStringValue]);
}

Dann würde ich diesen Code wie folgt verwenden:

LockOnValue(Request.QueryString["foo"])
//Check cache expiry
//if expired
    //Load new values and cache them.
//else
    //Load cached values
UnlockOnValue(Request.QueryString["foo"])

Hintergrund: Ich erstelle eine App in ASP.NET, die Daten basierend auf einer einzelnen benutzerdefinierten Variablen in der Abfragezeichenfolge herunterlädt. Die Anzahl der Werte ist sehr begrenzt. Ich muss die Ergebnisse für jeden Wert für einen bestimmten Zeitraum zwischenspeichern.

Ansatz: Ich habe beschlossen, lokale Dateien zum Zwischenspeichern der Daten zu verwenden, was nicht die beste Option ist, aber ich wollte es versuchen, da dies nicht kritisch ist und die Leistung kein großes Problem darstellt. Ich habe 2 Dateien pro Option verwendet, eine mit dem Cache-Ablaufdatum und eine mit den Daten.

Problem: Ich bin mir nicht sicher, wie das Sperren am besten funktioniert, und ich bin mit Threading-Problemen in .NET nicht allzu vertraut (einer der Gründe, warum ich mich für diesen Ansatz entschieden habe). Basierend auf dem, was verfügbar ist und was ich gelesen habe, dachte ich, dass das Obige funktionieren sollte, aber ich bin mir nicht sicher und wollte eine zweite Meinung.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage