Patern Singleton (Limiter le nombre d'instance d'une class)
cs_Myke
Messages postés138Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 2 février 2010
-
23 août 2007 à 22:21
cs_Myke
Messages postés138Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 2 février 2010
-
26 août 2007 à 22:04
Est-ce que le pattern Singleton est adéquat pour asp.net. Le fait que les thread s'execute sur le seveur et non sur une mahine physique me force à me poser quelques questions. Comme exemple est ce que chaque usager qui execute des opérations sur le serveur est dans un thread différent.
Si on applique le pattern comme dans cette exemple : webman.developpez.com/articles/dotnet/patterns/singleton/ sur une connection de base de donnés avec l'instruction [Synclock] .Je crois que cela ne fonctionnera plus car nous bloquerons tous les thread du serveur et il y aura seulement une personne qui pourra se connecter à la base de données en même temps. Est-ce exact ?
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 23 août 2007 à 23:27
En terme non 'objet', un singleton est simplement une variable globale volatile utilisée par plusieurs processus. Volatile car il faut que les threads se mettent en file d'attente pour pouvoir l'utiliser ou la modifier. Jamais d'accès simultané dessus, d'ou les système de lock, sémaphores ect...
(classe 'Interlocked' en C#)
[Synclock] n'empèche donc pas les threads de s'exécuter, mais cette instruction leurs dit d'attendre leur tour.
Tout dépend de la portée de l'objet et de ce à quoi il sert.
C'est comme vouloir accéder à une variable private depuis n'importe où, si on applique private, c'est pour une raison vu dans l'analyse.
(Les patterns sont très bien mais ils peuvent parfois compliquer des choses simples)
cs_Myke
Messages postés138Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 2 février 2010 24 août 2007 à 02:48
Ok merci pour la réponse. Je résume comme je l'ai compris. Les dll sont partagés entre les différentes requête. Ce qui n'est pas le cas d'une application bureau car tous les DLL se trouvent sur la machine localement. Par contre en asp.net le serveur lorsque il effectue des opérations comme exemple une class (Connection à une BD) demander par deux usagers simultanément. Il executera la premiere requete, lorsque l'opération est terminé il executera la requete du deuxieme usager. Moi je croyais que chaque utilissateur s'éxecutais dans un thread différent. Est-ce que tu peux m'en dire plus ou cela résume bien.
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 24 août 2007 à 23:44
En tout cas, il n'y a qu'un seul aspnet_working_process sur le serveur et j'imagine que chaque utilisateur a son espace.
Mais pour les objets, il y a 3 portées, Application, session et local.
Donc tout dépend de l'objet utilisé.
Si la connexion est une variable application, tous les utilisateurs se la partage (une seule allocation), si elle est session, allocation à chaque utilisateur ect...
cs_Myke
Messages postés138Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 2 février 2010 26 août 2007 à 22:04
Merci pour tes réponses : J'ai trouvé une explication ici : (http://support.microsoft.com/kb/893666/fr) - il semble que tous les thread ont accès à les même variable a moins d'apposer un lock sur le thread en cours