In questo breve articolo cercheremo di capire meglio, nella pratica, come è impostato il sistema che sta alla base della compilazione (e della ricompilazione) automatica delle pagine ASP.NET.
Alla base di tutto: CLR e MSIL
Il cuore del sistema è ovviamente l'ormai noto Common Language Runtime (CLR).
Il .NET Framework si basa sul CLR, per l'esecuzione del codice MSIL ( Microsoft Intermediate Language ).
Il codice MSIL è prodotto dai vari compilatori .NET. In sintesi, ogni compilatore, C# o VB.NET che sia, compila in MSIL e non in un linguaggio macchina. E' anche questo il motivo per cui un linguaggio vale l'altro, alla fine ciò che generano è MSIL.
E' una premessa molto importante per capire, dunque, come avviene nel dettaglio la compilazione automatica della pagina.
La compilazione automatica
Il CLR esegue JIT (just in time) il codice MSIL, creato a partire da un compilatore.
La sequenza (che è spiegata anche meglio nalla figura) è grosso modo questa:
- il worker process ASPNET_wp.exe viene invocato, perchè c'è una richiesta per una pagina ASP.NET
- se la nostra pagina è invocata per la prima volta, si passa al punto successivo.
- ora avviene la compilazione, attraverso il compilatore del linguaggio in cui è scritta la pagina, in MSIL. Dalla pagina viene creata una classe, salvata su disco con un nome temporaneo, in un assembly (oggetto).
- il nostro assembly verrà eseguito JIT in memoria

Cosa succede alle successive richieste?
Se la pagina non viene modificata, sarà utilizzata la versione già compilata in memoria.
Se la pagina dovesse subire modifiche o il servizio web venisse riavviato, si ripeterebbe il ciclo.
Un approndimento particolare lo merita il terzo punto. E' divisibile in più fasi:
- preparazione della pagina alla compilazione: vengono individuate tutte le dipendenze con eventuali classi esterne
- viene invocato il compilatore specifico per il linguaggio utilizzato nella pagina. Nel caso di Visual Basic.NET sarà vbc.exe, per C# csc.exe
- è in questo frangente che si ha la percezione della lentezza della prima esecuzione. E' sufficiente avere un server con un discreto quantitativo di RAM per non accorgersene.
- Il compilatore genera codice MSIL, salvato su disco.
La lentezza della prima esecuzione in realtà non è visibile, a meno che l'equipaggiamento di RAM sia basso (128 MB).
La ricompilazione automatica
Il framework, attraverso una classe particolare, FileSystemWatcher , contenuta nel namespace System.IO , monitora tutti i cambiamenti ai sorgenti.
E' sfruttando questo meccanismo che le modifiche sono intercettate al volo e la ricompilazione avviene.
Nella pratica, avviene una compilazione ex-novo, proprio perchè la versione precedente, contenuta su disco e memoria, sarà stata invalidata.
In questo modo potete continuare ad usare il vostro editor preferito, perchè ciò su cui andrete a lavorare sarà sempre e comunque un file sorgente "pulito".
Conclusioni
I cosiddetti internals del .NET Framework in moltissimi casi possono anche esserci oscuri, per il semplice fatto che è un argomento più da architetturista che da sviluppatore.
In moltissimi casi come questo, invece, una buona conoscenza dell'architettura può aiutarci a capire meglio come debba essere impostata un'applicazione, dei limiti che ci sono, ma soprattutto delle possibilità avanzate di sfruttare queste caratteristiche.
Contenuti dell'articolo
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà
Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!