Scenari di applicazioni della reflection emit

In questa sezione verranno descritti in maggiore dettaglio alcuni degli scenari in cui le applicazioni utilizzano la reflection emit e i metodi dinamici.

Esecuzione di uno script in un browser

In questo scenario un browser carica una pagina HTML contenente un programma script ed esegue tale programma. La procedura è la seguente:

  1. Il browser avvia il modulo di gestione di script nel dominio applicazione del browser stesso.

  2. Il browser estrae lo script dalla pagina HTML e lo passa al modulo di gestione di script.

  3. Il modulo di gestione di script crea un assembly dinamico temporaneo.

  4. Il modulo di gestione di script utilizza le API della reflection emit per creare il codice nell'assembly dinamico.

Esecuzione di uno script in una pagina ASP.NET

In questo scenario un browser apre una pagina ASP.NET contenente un programma script. Il programma viene compilato sul server ed eseguito. La procedura è la seguente:

  1. ASP.NET avvia il proprio dominio applicazione nonché il modulo di gestione di script per compilare ed eseguire il programma.

  2. Il modulo di gestione di script crea un assembly dinamico persistente e un modulo dinamico persistente nell'assembly dinamico.

  3. Il modulo di gestione di script compila il programma utilizzando le API della reflection emit e crea il codice nel modulo dinamico persistente.

  4. Il codice compilato viene eseguito e viene rilevata un'espressione eval.

  5. Il modulo di gestione di script crea un modulo dinamico temporaneo nell'assembly dinamico in cui inserire il codice dell'espressione eval.

  6. Il modulo di gestione di script valuta l'espressione eval mediante l'esecuzione del modulo dinamico temporaneo.

  7. ASP.NET richiede al modulo di gestione di script di salvare l'assembly dinamico e il modulo dinamico persistente nella cache in modo che non sia necessario ricompilare lo script quando si visita nuovamente la pagina.

Compilazione di un'espressione regolare mediante la reflection emit

In questo scenario la reflection emit viene utilizzata in un compilatore per compilare espressioni regolari in codice sorgente. L'utente ha la possibilità di dichiarare le espressioni regolari da compilare. La procedura è la seguente:

  1. Viene elaborato il primo utilizzo di un'espressione regolare nel codice sorgente di un utente.

  2. Viene compilata l'espressione regolare in una classe di analisi personalizzata utilizzando la reflection emit perché l'utente ha richiesto la compilazione dell'espressione. L'espressione regolare viene dapprima convertita nel codice operativo dell'espressione regolare del compilatore. Se ad esempio un'istruzione richiede di "trovare zero o più corrispondenze della lettera A", il codice operativo dell'espressione regolare verrà convertito nel linguaggio MSIL (Microsoft Intermediate Language). È possibile, ad esempio, che venga generato un ciclo per scorrere tutte le occorrenze della lettera A individuate.

  3. La classe di analisi compilata viene salvata perché possa essere riutilizzata in futuro.

  4. Viene creata un'istanza della classe di analisi compilata ed eseguito il codice nel dominio applicazione corrente.

  5. Viene elaborato un utilizzo successivo della stessa espressione regolare nel codice sorgente dell'utente.

  6. La classe di analisi compilata per l'espressione regolare viene recuperata, ne viene creata un'istanza e viene eseguito il codice nel dominio applicazione corrente.

Si verifica una perdita in termini di prestazioni all'utilizzo della prima istanza di un'espressione regolare, perché è necessario compilare l'espressione in una classe di analisi. I successivi utilizzi della stessa espressione regolare verranno tuttavia eseguiti in modo efficiente. Per le espressioni regolari di utilizzo frequente la riduzione delle prestazioni in corrispondenza della prima compilazione è insignificante, perché viene in seguito recuperata da un notevole miglioramento del tempo di esecuzione.

Vedere anche

Concetti

Espressioni regolari di .NET Framework

Altre risorse

Creazione di assembly e metodi dinamici

Utilizzo della reflection emit