2009-04-22 13 views
9

Esiste un AppDomain per ogni programma C# anche se non creiamo specificamente un AppDomain? Perché è richiesto? Ho letto di assembly di terze parti che bloccano l'intera applicazione se non li cariciamo in AppDomain separato. Non ho capito bene quel punto. Qualcuno può spiegare anche questo.Esiste un AppDomain per ogni programma C#?

risposta

15

AppDomain è praticamente come un processo, è un'infrastruttura in cui viene eseguita l'applicazione. Un assembly .NET deve essere caricato in un AppDomain per essere eseguito. Non è necessario caricare gli assembly di terze parti in AppDomains separato, ma se lo si fa, fornisce l'isolamento tra di loro (come due processi separati) e il malfunzionamento in uno non influisce sull'altro. I domini delle applicazioni possono essere scaricati in modo indipendente.

Come esempio, utilizzare SQL Server AppDomain s per caricare assembly CLR sicuro nel suo processo.

2

Ogni applicazione ha almeno un dominio di applicazione, sì.

Non so che cosa la nota sugli assembly 3rd party significa.

1

c'è almeno un AppDomain per ogni programma è possibile creare come molti come ti piace, ma si avrà raramente bisogno più di uno.

suo fondamentalmente un contenitore in cui il codice che viene eseguito con una particolare fiducia è in esecuzione.

1

C'è un dominio applicazione predefinita in cui l'applicazione viene caricato in (ogni istanza prende il proprio).

L'arresto anomalo significa che un assembly di terze parti (ad esempio un plug-in) interromperà l'intera applicazione quando si blocca se non viene caricata in un dominio app separato. Pertanto, è buona pratica caricare i plug-in in un dominio app separato, perché un arresto anomalo in un dominio app arresta solo il dominio dell'app e non gli altri domini. Il CLR Add-In blog ha alcuni post su questo.

Una cosa importante da notare è che un dominio app non ha necessariamente bisogno di essere nello stesso processo o sullo stesso sistema, quindi è fondamentalmente necessario per il servizio remoto.

3

Ho letto sugli assembly 3rd party che causano incidente, se non facciamo uso di AppDomain

Penso che si sta parlando di caricamento di altri gruppi per i domini applicazione separata. In questo modo possono essere isolati dallo spazio degli indirizzi per evitare che si verifichi un arresto anomalo del loro codice. Il costo è che comunicare con un assembly in un dominio app separato è più difficile e presenta una penalità perfetta poiché tutte le chiamate devono essere marializzate attraverso il limite del dominio dell'app.

Questo è un argomento abbastanza avanzato, consiglierei di leggere su Richter (altri libri sono disponibili).

Problemi correlati