Question

Dois-je accès aux membres de verrouillage d'instance?

Exemple:

public class HttpModule : IHttpModule
{
    //...

    Dictionary<int, int> foo;

    void UseFoo(int a, int b)
    {
        foo[a] = b;
    }
}
Était-ce utile?

La solution

Il est pas clair pour moi si loin de la documentation MSDN, mais je l'ai trouvé un forum post de quelqu'un qui prétend connaître la réponse . On dirait que vous ne devriez pas attendre mauvaises choses pour arriver avec votre mise en œuvre, mais vous devez savoir que l'état de foo sera partagé pas nécessairement sur tous les résultats depuis votre HttpModule sera créé une fois par HttpApplication que IIS choisit de garder dans sa piscine.

Autres conseils

Je voulais offrir ici mes conclusions relatives à cette question comme je l'ai observé dans IIS6:

Je traite cette question en profondeur dans IIS6 et ont trouvé des résultats intéressants en utilisant log4net et de réflexion pour la capture historique d'exécution. Ce que j'ai trouvé est qu'il ya une vaste « gestion des threads » se passe dans les coulisses. Il semble qu'il existe une série « primaire » de fils qui correspond à 1: 1 à HttpApplication. Ces fils cependant ne gèrent pas exclusivement le pipeline pour votre demande. Différents sous-fils peuvent être appelés lorsque ces instances sont accessibles. nouvelles demandes ultérieures et les demandes de ressources utilisées par votre application semblent partager certaines informations persistantes relatives à votre demande initiale, mais sont encore jamais entièrement prises en charge par le fil initial indiquant un certain type de relation. Je ne pouvais pas discerner un schéma de béton (autre que ce que je l'ai décrit précédemment) à quels éléments ont été divvied à d'autres sujets comme il était apparemment aléatoire. Ma conclusion à cette preuve est qu'il existe un concept de mise en commun hiérarchique? se produisant où un sous-ensemble connu d'éléments de référence sont hérités dans les filets de l'enfant à travers la référence de parent.

Donc, comme une réponse, je dirais que HttpModules sont partagée entre les threads. En termes de verrouillage valeurs d'instance, ce serait applicable si les valeurs sont applicables à toutes les demandes qui utilisent le module et doit maintenir un état. Je pouvais voir ce qui est utile si essayant de maintenir les valeurs d'instance stateful qui sont coûteux à vérifier afin de pouvoir être réutilisés dans les demandes ultérieures.

Cette question me avait été troublant pendant un certain temps, espérons cette information aide quelqu'un.

scroll top