2010-11-09 12 views
5

Poiché il caricamento dinamico dell'assieme richiede il caricamento dell'appodino per abilitare l'eliminazione dell'assieme con l'appdomain relativo allo scaricamento, è presente un numero "max" di domini in un processo da caricare? Sto pensando ad un'applicazione basata su server che ogni utente possa eseguire il suo codice C# in modo dinamico. Ma cosa succede se, ad esempio, 2000 utenti accedono e caricano i loro codici? Ci sono eventuali restrizioni che potrei incontrare oltre al numero di appdomians?Numero massimo di appadaggi caricati in un unico processo

grazie.

risposta

5

Quasi tutti i limiti CLR sono basati su "come permessi di memoria". L'unica eccezione che conosco è il numero di membri di una classe, limitato a 65536. Questo si basa sulla definizione di un valore di token. Niente del genere per AppDomains.

+3

ASP.NET non crea 1 'AppDomain' per richiesta. È fondamentalmente 1 per sito Web ASP.NET. Quel 'AppDomain' rimane in vita per un po ', anche se ci sono condizioni che lo" riciclano "automaticamente. Non sono sicuro di ciò che fa SQL Server, ma non viene creato un nuovo 'AppDomain' per ogni query. –

+0

@bin - l'isolamento dei guasti è la chiave afaik. Una volta che un thread muore su un'eccezione non gestita, l'annuncio è spazzatura. Non può essere quella * una * richiesta di pagina che le bombe uccidono tutte le altre concorrenti. Forse riciclare quelli che non morivano. Non conosco le regole esatte. –

+0

ASP.NET ha un grande vecchio tentativo/cattura in cima allo stack. Canalizza nell'evento 'HttpApplication.Error'. Se non ci sono gestori, mostra la pagina di errore 500 predefinita. Se accade qualcosa di veramente brutto, ASP.NET ricicla il dominio, oppure l'intero processo di lavoro potrebbe riavviarsi, ma la maggior parte delle eccezioni non gestite non causa queste cose. –

5

Non credo che ci sia un valore massimo definitivo integrato nel CLR. Piuttosto sarebbe la quantità di memoria rimasta che determina se è possibile caricare dinamicamente un nuovo appdomain.

Farò un po 'di ricerche, ma non penso ci sia un valore impostato per questo.

EDIT:

Here's un altro post che potrebbe aiutare a chiarire le cose.

1

Principalmente sarà definito dai limiti del sistema operativo. La macchina x86 non può utilizzare più di 4 GB di memoria per un processo [solo 2 GB in modalità utente]. Se vai per x64 hai un limite molto più grande. Da quello che so non esiste un limite del numero di domini applicativi che puoi creare.