I domini applicazioni, rappresentati da oggetti AppDomain, forniscono limiti di protezione, scaricamento e isolamento per l'esecuzione del codice gestito.
-
Utilizzare i domini applicazioni per isolare le attività che potrebbero interferire con un processo. Se lo stato del dominio applicazione rappresentato dall'oggetto AppDomain che esegue un'attività diventa instabile, è possibile scaricarlo senza interferire con il processo. Tale operazione è utile quando è necessario eseguire un processo per lunghi periodi di tempo senza riavviarlo. I domini applicazioni possono anche essere utilizzati per isolare le attività i cui dati non devono essere condivisi.
-
Se un assembly viene caricato nel dominio applicazione predefinito, non è possibile scaricarlo dalla memoria mentre il processo è in esecuzione. Tuttavia, se si apre un secondo dominio applicazione per caricare ed eseguire l'assembly, quest'ultimo viene scaricato quando viene caricato il secondo dominio applicazione. Utilizzare questa tecnica per ridurre il working set di processi a esecuzione prolungata che talvolta utilizzano DLL di grandi dimensioni.
I domini applicazioni multipli possono essere eseguiti in un solo processo. Non sussiste, comunque, alcuna relazione biunivoca tra domini applicazioni e thread. Ad un solo dominio applicazione possono appartenere più thread. Sebbene un determinato thread non sia confinato a un unico dominio applicazione, un thread può essere eseguito in un singolo dominio applicazione per volta.
I domini applicazioni vengono creati utilizzando il metodo CreateDomain. Le istanze di AppDomain vengono utilizzate per caricare ed eseguire assembly (Assembly). Quando un oggetto AppDomain non è più in uso, può essere scaricato.
La classe AppDomain implementa un insieme di eventi che consentono alle applicazioni di rispondere quando viene caricato un assembly, viene scaricato un dominio applicazione o viene generata un'eccezione non gestita.
Per ulteriori informazioni sull'utilizzo dei domini applicazioni, vedere Domini applicazione.
Questa classe implementa le interfacce MarshalByRefObject, _AppDomain e IEvidenceFactory.
Non creare mai un wrapper remotizzabile per un oggetto AppDomain. Questa operazione può infatti indurre la pubblicazione di un riferimento remoto all'oggetto AppDomain, esponendo metodi quali CreateInstance all'accesso remoto ed eliminando di fatto la protezione dall'accesso di codice dell'oggetto AppDomain. Client non autorizzati potrebbero connettersi all'oggetto AppDomain remoto e ottenere così accesso a qualsiasi risorsa a cui lo stesso oggetto AppDomain abbia accesso. Non creare wrapper remotizzabili per tipi che estendono l'oggetto MarshalByRefObject e che implementano metodi che potrebbero essere utilizzati da client non autorizzati per eludere il sistema di protezione.
Attenzione |
|---|
| Il valore predefinito per la proprietà AppDomainSetup.DisallowCodeDownload è false. Questa impostazione non è affidabile per la protezione dei servizi. Per impedire il download di codice parzialmente attendibile da parte di servizi, impostare la proprietà su true. |
Nota sulla piattaforma Windows Mobile per Pocket PC,
Windows Mobile per Smartphone,
Windows CE:
Il caricamento di assembly in un'area di codice indipendente dal dominio per renderli utilizzabili in più domini applicazione non è supportato.