2010-04-30 8 views
1

Quelqu'un pourrait-il conseiller dans le contexte d'une application ASP.Net est une fonction partagée/statique commune à tous les utilisateurs?ASP.Net Architecture spécifique aux fonctions partagées/statiques

Si par exemple vous avez une fonction

Public shared function GetStockByID(StockID as Guid) as Stock 

est cette fonction commune à tous les utilisateurs actuels de votre application? Ou est la fonction partagée uniquement spécifique à l'utilisateur actuel et partagée dans le contexte de SEULEMENT cet utilisateur actuel? Donc, plus précisément, ma question est la suivante: en plus des problèmes de concurrence de base de données tels que le verrouillage de table, dois-je me préoccuper des problèmes de threading dans les fonctions partagées dans une application ASP.Net?

Dans ma tête; disons que mon espace de noms d'application est MyTestApplicationNamespace. Chaque fois qu'un nouvel utilisateur se connecte à mon site, une nouvelle instance de MyTestApplicationNamespace est créée et, par conséquent, toutes les fonctions partagées sont communes à cette instance et à cet utilisateur, mais pas communes à plusieurs utilisateurs. Est-ce correct?

Répondre

2

Aucune instance d'un espace de noms n'est jamais "créée" lors de l'exécution. Pensez-y comme un moyen d'organiser le code, comme un répertoire sur le disque dur.

Je considère la méthode partagée comme un fragment de code pouvant être exécuté sans instancier un objet. Ainsi, chaque utilisateur aura son propre processus logique indépendant passant par le code.

Si vous voulez un seul objet qui est partagée par chaque utilisateur, il peut se faire comme suit:

 public class cApp 
     { 

       static readonly cDB _cDB = 
new cDB(ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString); 


       public static cDB DB 
       { 
        get 
        { 
         return _cDB; 
        } 
       } 

     } 

Ce instancier un objet de type cdb la première fois qu'il est touché dans un fil méthode sûre . Il sera appelé _cDB qui peut être utilisé dans le code à travers la base de données DB. Comme:

cApp.DB.MyMethod(); 

Cela aura seulement une instance instancié, mais encore une fois chaque utilisateur exécute le code indépendamment. Ainsi, la valeur des variables privées est vue par chaque processus (comme la chaîne de connexion dans l'exemple), mais une méthode locale définissant une variable locale n'affecte aucun autre processus passant par ce même code.

+0

Merci beaucoup pour la réponse approfondie ... –

0

tout est visible tout le temps! classes, fonctions statiques, fonctions sur classes, etc. la seule chose qui n'est pas constante est la donnée chargée.

Les données statiques restent à travers les demandes (peut-être, les applications peuvent être vidées). Généralement, par requête, vous chargez les objets/données que vous voulez, et les présentez comme vous le souhaitez.

Les fonctions statiques qui fonctionnent sur des données statiques doivent être conscientes des problèmes de thread.

Questions connexes