Frage

Muss ich Sperre Zugriff auf Instanzmitglieder haben?

Beispiel:

public class HttpModule : IHttpModule
{
    //...

    Dictionary<int, int> foo;

    void UseFoo(int a, int b)
    {
        foo[a] = b;
    }
}
War es hilfreich?

Lösung

Es ist nicht Kristall mir klar, so weit von der MSDN-Dokumentation, aber ich fand ein Forum Post von jemandem, der die Antwort wissen behauptet. Es klingt wie Sie nicht erwarten sollten, schlechte Sachen mit Ihrer Implementierung geschehen, aber Sie sollten sich bewusst sein, dass foo des Staates wird nicht unbedingt über alle Ergebnisse gemeinsam genutzt werden, da Ihr HttpModule wird einmal pro HttpApplication erstellt werden, dass IIS wählt in seinem Pool zu halten.

Andere Tipps

Ich wollte hier meine Erkenntnisse zu dieser Frage mit Bezug zu bieten, wie ich in IIS6 beobachtet habe:

Ich habe ausführlich in IIS6 mit diesem Thema beschäftigt und haben einige interessante Ergebnisse unter Verwendung von log4net und Überlegungen zur Erfassung Ausführungshistorie gefunden. Was ich gefunden habe ist, dass es umfangreich ist ‚Thread-Management‘ hinter den Kulissen. Es scheint, dass es eine ‚primäre‘ Reihe der Fäden ist, die mit 1: 1 entspricht, bis HttpApplication. Diese Fäden jedoch nicht ausschließlich die Pipeline für Ihre Anfrage zu behandeln. Verschiedene Unterfäden können aufgerufen werden, wenn diese Instanzen zugegriffen werden. Nachfolgende neue Anforderungen und Ressourcenanforderungen genutzt von der Anwendung scheint einige persistenten Informationen in Bezug auf Ihre ursprüngliche Anfrage zu teilen, sind aber noch nie vollständig von dem ursprünglichen Thread behandelt irgendeine Art von Beziehung angibt. Ich konnte keine konkreten Muster (andere als das, was ich vorher beschrieben habe) erkennen darüber, welche Elemente zu anderen Threads divvied wurden, wie es scheinbar zufällig war. Mein Fazit zu diesem Beweis ist, dass es einige Konzepte des hierarchischen Pooling ist? auftritt, wo eine unbekannte Untergruppe von Referenzelementen sind in den untergeordneten Fäden durch die übergeordnete Referenz geerbt.

So wie eine Antwort würde ich das HttpModules sagen ist zwischen Threads gemeinsam genutzt. In Bezug auf Beispiel Wert von Sperren, wäre dies anwendbar, wenn die Werte auf alle Anforderungen gelten, die das Modul verwenden und muss einen Zustand halten. Ich konnte sehen, dies ist nützlich, wenn Sie versuchen, Stateful Instanz Werte zu erhalten, die so zu ermitteln, teuer sind, dass sie in nachfolgenden Anforderungen wiederverwendet werden können.

Dieses Problem seit einiger Zeit beunruhigt mich war hoffentlich diese Info hilft jemand.

scroll top