Ich wollte hier meine Erkenntnisse zu dieser Frage mit Bezug zu bieten, wie ich in IIS6 beobachtet haben:
Ich habe mit dieser Frage ausführlich in IIS6 tun und haben einige interessante Ergebnisse unter Verwendung von log4net und Reflexion erfassen Ausführungshistorie gefunden . Was ich gefunden habe ist, dass hinter den Kulissen ein umfangreiches "Thread Management" stattfindet. Es scheint, dass es eine "primäre" Reihe von Threads gibt, die 1: 1 bis HttpApplication
entspricht. Diese Threads behandeln jedoch nicht ausschließlich die Pipeline für Ihre Anfrage. Verschiedene verschiedene Sub-Threads können aufgerufen werden, wenn auf diese Instanzen zugegriffen wird. Nachfolgende neue Anforderungen und Ressourcenanforderungen, die von Ihrer Anwendung verwendet werden, scheinen einige persistente Informationen bezüglich Ihrer ursprünglichen Anforderung zu teilen, werden jedoch niemals vollständig vom anfänglichen Thread behandelt, der eine Art von Beziehung angibt. Ich konnte kein konkretes Muster (außer dem, was ich zuvor beschrieben habe) erkennen, welche Elemente an andere Threads verteilt wurden, da sie scheinbar zufällig waren. Meine Schlussfolgerung zu diesem Beweis ist, dass es ein Konzept für hierarchisches Pooling gibt? Wenn eine unbekannte Teilmenge von Referenzelementen in den untergeordneten Threads über die übergeordnete Referenz geerbt wird.
Also als Antwort würde ich sagen, dass HttpModules
zwischen Threads geteilt sind. In Bezug auf das Sperren von Instanzwerten wäre dies anwendbar, wenn die Werte für alle Anforderungen gelten, die das Modul verwenden und einen bestimmten Zustand beibehalten müssen. Ich könnte sehen, dass dies nützlich ist, wenn versucht wird, statusbehaftete Instanzwerte beizubehalten, die teuer zu ermitteln sind, so dass sie in nachfolgenden Anforderungen wiederverwendet werden können.
Dieses Problem beunruhigte mich seit einiger Zeit hoffentlich hilft diese Info jemandem.
Ja, es verwendet die Instanz unter vielen verschiedenen Anforderungen erneut. Aber die Frage ist, ob die Instanz zwischen verschiedenen Threads wiederverwendet wird. –
Von dem, was ich sagen kann: Ja, aber nicht gleichzeitig. Eine HttpApplication scheint einer bestimmten Anforderung für die Dauer dieser Anforderung zugewiesen zu sein. – sblom
Ok, danke. Ich werde warten, bis jemand weiß, wie genau das bestätigt, da ich diesen Code in der Produktionsumgebung verwenden werde, und ich werde schwer zu debuggen sein. –