Condividi tramite


Cenni preliminari sull'hosting

In .NET Framework versione 2.0 sono disponibili applicazioni che ospitano Common Language Runtime con controllo su numerose funzionalità del runtime. È possibile sostituire alcune funzionalità, ad esempio l'allocazione della memoria e il caricamento degli assembly, con implementazioni personalizzate. È possibile controllare il comportamento di altre funzionalità, ricevere notifiche di eventi nel runtime e gestire domini applicazione.

Inizializzazione e avvio di un runtime ospitato

Come con le versioni precedenti, il runtime viene inizializzato dalla funzione CorBindToRuntimeEx. È possibile scegliere quale versione del runtime caricare, ma un processo può ospitare solo una versione. Se viene caricata la versione 2.0, la funzione restituirà l'interfaccia ICLRRuntimeHost, utilizzata per avviare il runtime ed eseguire il codice gestito.

Nota

Nelle versioni precedenti viene restituita l'interfaccia ICorRuntimeHost.

L'avvio del runtime è illustrato in Caricamento di Common Language Runtime in un processo, mentre l'esecuzione del codice gestito è illustrata in Transizione al codice di hosting gestito.

Gestori di hosting

In .NET Framework versione 2.0 Common Language Runtime fornisce gestori di hosting per controllare numerose funzionalità del runtime ospitato e consente all'applicazione host di implementare altri gestori. Per una descrizione delle interfacce COM che è possibile utilizzare per interagire con i gestori forniti dal runtime e implementare i propri gestori di hosting, vedere Interfacce di hosting per .NET Framework 2.0.

Nella tabella riportata di seguito le interfacce sono raggruppate in base al tipo di funzionalità fornita. Per prima è indicata l'interfaccia più importante per ogni gestore.

Manager Funzione Interfacce

Gestore del caricamento degli assembly

Consente all'host di personalizzare i percorsi da cui vengono caricati gli assembly, la modalità di gestione delle versioni e i formati da cui possono essere caricati gli assembly. Gli assembly ad esempio potrebbero essere caricati da un database anziché dai file sul disco rigido.

Common Language Runtime utilizza l'interfaccia IHostControl per determinare se un host implementa tale gestore.

IHostAssemblyManager

IHostAssemblyStore

ICLRAssemblyReferenceList

ICLRAssemblyIdentityManager

Gestore dei criteri

Consente all'host di specificare la modalità di gestione degli errori di programma in modo da supportare requisiti di affidabilità diversi.

L'host utilizza l'interfaccia ICLRControl per avere accesso al gestore di runtime e implementa i callback di IHostPolicyManager per le notifiche degli errori provenienti dal runtime.

ICLRPolicyManager

IHostPolicyManager

Gestore della protezione host

Consente all'host di applicare il proprio modello di programmazione, impedendo l'utilizzo di determinati tipi o membri. L'host ad esempio può impedire l'utilizzo di primitive di threading o di sincronizzazione.

L'host utilizza l'interfaccia ICLRControl per avere accesso al gestore di runtime.

ICLRHostProtectionManager

Gestore della memoria

Consente all'host di controllare l'allocazione della memoria fornendo sostituzioni per le funzioni del sistema operativo utilizzate da Common Language Runtime per allocare memoria.

Common Language Runtime utilizza l'interfaccia IHostControl per determinare se un host implementa tale gestore.

IHostMemoryManager

IHostMAlloc

ICLRMemoryNotificationCallback

Gestore della Garbage Collection

Consente all'host di implementare metodi per ricevere notifica dell'inizio e della fine della Garbage Collection. Consente all'host di avviare raccolte, raccogliere statistiche e specificare alcune caratteristiche di raccolta.

L'host utilizza l'interfaccia ICLRControl per avere accesso al gestore di runtime. Common Language Runtime utilizza l'interfaccia IHostControl per determinare se un host implementa tale gestore.

IHostGCManager

ICLRGCManager

Gestore del debug

Consente all'host di determinare se è associato un debugger, fornire informazioni di debug aggiuntive e personalizzare le attività di debug.

L'host utilizza l'interfaccia ICLRControl per avere accesso al gestore di runtime.

ICLRDebugManager

Gestore degli eventi di Common Language Runtime

Consente a un host di registrarsi per la notifica degli eventi enumerati da EClrEvent.

L'host utilizza l'interfaccia ICLRControl per avere accesso a tale gestore e implementa i relativi gestori eventi tramite IActionOnCLREvent.

ICLROnEventManager

IActionOnCLREvent

Gestore delle attività

Consente all'host di ricevere una notifica ogni volta che un thread effettua una transizione fra codice gestito e non gestito. Consente all'host di controllare l'affinità di thread, nonché l'avvio, l'arresto e la modalità di pianificazione delle attività.

Common Language Runtime utilizza l'interfaccia IHostControl per determinare se un host implementa tale gestore.

IHostTaskManager

ICLRTaskManager

IHostTask

ICLRTask

Gestore del pool di thread

Consente all'host di implementare il proprio pool di thread per il runtime da utilizzare.

Common Language Runtime utilizza l'interfaccia IHostControl per determinare se un host implementa tale gestore.

IHostThreadPoolManager

Gestore della sincronizzazione

Consente all'host di implementare le proprie primitive di sincronizzazione per il runtime da utilizzare. L'host può fornire eventi, sezioni critiche e semafori.

Common Language Runtime utilizza l'interfaccia IHostControl per determinare se un host implementa tale gestore.

IHostSyncManager

ICLRSyncManager

IHostCrst

IHostManualEvent

IHostAutoEvent

IHostSemaphore

Gestore del completamento I/O

Consente all'host di implementare la propria implementazione dell'input/output asincrono.

Common Language Runtime utilizza l'interfaccia IHostControl per determinare se un host implementa tale gestore.

IHostIoCompletionManager

Nota

Le interfacce di hosting per le versioni precedenti del runtime sono illustrate in Interfacce di hosting per .NET Framework 1.0 e 1.1.

Dal punto di vista dell'individuazione, i gestori possono essere suddivisi in due categorie principali:

  • Gestori implementati dall'host e individuati dal runtime tramite l'interfaccia IHostControl.

  • Gestori forniti da Common Language Runtime e individuati dall'host tramite l'interfaccia ICLRControl.

Gestori dei domini applicazione

Per i programmi che ospitano Common Language Runtime, i domini applicazione garantiscono una maggiore affidabilità isolando gli assembly l'uno dall'altro. Gli assembly possono essere scaricati dal processo scaricando i domini applicazione.

Per gestire più domini applicazione, .NET Framework versione 2.0 fornisce la classe AppDomainManager come classe base da cui è possibile derivare i propri gestori dei domini applicazione. Il gestore dei domini applicazione che si progetta per l'applicazione host è essenzialmente un'estensione dell'host, in codice gestito. Viene caricato automaticamente in ogni dominio applicazione creato nel processo.

Il gestore dei domini applicazione può migliorare le prestazioni eliminando alcune transizioni fra codice gestito e non gestito. Può ricevere notifica della creazione di nuovi domini applicazione, dando la possibilità di configurarli. Fornisce inoltre un host non gestito in grado di chiamare codice gestito.

Vedere anche

Riferimenti

AppDomainManager

Concetti

Caricamento di Common Language Runtime in un processo

Altre risorse

Hosting di Common Language Runtime
Domini applicazione
Interfacce di hosting per .NET Framework 2.0