2010-11-09 5 views
5

Étant donné que le chargement d'un assembly dynamique nécessite un chargement de domaine pour tuer l'ensemble avec un domaine d'application associé au déchargement, existe-t-il un nombre maximal d'applications dans un processus? Je pense à une application basée sur un serveur que chaque utilisateur peut exécuter dynamiquement son code C# propriétaire. Mais que se passe-t-il si, par exemple, 2000 utilisateurs se connectent et chargent leurs codes? Y a-t-il des restrictions possibles que je pourrais rencontrer en plus du nombre d'appdomians?Nombre maximal de domaines d'application chargés en un seul processus

merci.

Répondre

5

Presque toutes les limites de CLR sont basées sur «comme le permet la mémoire». La seule exception que je connaisse est le nombre de membres d'une classe, limité à 65536. Cela est basé sur la définition d'une valeur de jeton. Rien de tel pour AppDomains. ASP.NET ne crée pas 1 `AppDomain` par requête.

+3

Il s'agit essentiellement d'1 par site Web ASP.NET. Ce 'AppDomain' reste actif pendant un certain temps, bien qu'il y ait des conditions qui le" recycleront "automatiquement. Je ne suis pas sûr de ce que SQL Server fait, mais un nouveau 'AppDomain' n'est pas créé pour chaque requête. –

+0

@bin - l'isolation des défauts est la clé afaik. Une fois qu'un thread meurt suite à une exception non gérée, l'annonce est indésirable. Il ne peut pas s'agir de * une * page demandant que les bombes détruisent toutes les autres. Recycler ceux qui ne sont pas morts peut-être. Je ne connais pas les règles exactes. –

+0

ASP.NET a un gros try/catch high sur la pile. Entonnoirs dans l'événement 'HttpApplication.Error'. S'il n'y a pas de gestionnaire, il affiche la page d'erreur 500 par défaut. Si quelque chose de vraiment mauvais arrive, ASP.NET recyclera le domaine, ou le processus de travail entier pourrait redémarrer, mais la plupart des exceptions non gérées ne provoquent pas ces choses. –

5

Je ne crois pas qu'il y ait une valeur maximale définitive dans le CLR. Il s'agit plutôt de la quantité de mémoire restante qui détermine si vous pouvez charger dynamiquement un nouveau domaine d'application. Je ferai un peu de recherche, mais je ne pense pas qu'il y ait une valeur pour cela.

EDIT:

Here's un autre poste qui pourrait aider à clarifier les choses. Généralement, il serait défini par vos limites de système d'exploitation.

1

Votre machine x86 ne peut pas utiliser plus de 4 Go en mémoire pour un processus [seulement 2 Go en mode utilisateur]. Si vous allez pour x64 vous avez une limite beaucoup plus grande. D'après ce que je sais il n'y a pas une telle limite au nombre de domaines d'application que vous pouvez créer.

Questions connexes