maggio 2006 Entries
Dispose serve a liberare memoria?

Stavo rispondendo a questo post di Andrea Moro quando alla fine mi sono reso conto di essere un po' prolisso, e allora ho pensato di esternare le mie elucubrazioni qui

Volevo fare una piccola precisazione per quanto riguarda l'interfaccia IDisposable, perché leggo spesso che si fa molta confusione su quest'aspetto: richiamare il metodo Dispose *NON* serve a liberare memoria.
A cosa serve allora? Sapete che per ogni classe posso scrivere un Finalizer, ad es. per liberare delle risorse unmanaged che la mia classe utilizza (si pensi ad un file aperto con un'istanza di FileStream). A differenza di altri linguaggi, però, i finalizer nel CLR non sono direttamente invocabili, ma possono essere eseguiti solo dal Garbage Collector, che per sua natura è non deterministico (come è stato giustamente detto nel post di cui sopra).

Ora, dato che non è bello mantenere impegnata una risorsa fino ad una garbage collection che non si sa se e quando arriverà, si può implementare il pattern IDisposable in modo da rilasciarla in maniera deterministica, e cioé quando sappiamo che non ci servirà più! Ma attenzione, perché fino a che non avviene la collect, l'oggetto (questa volta senza risorse unmanaged impegnate, e quindi "innocuo") è ancora lì bel bello nel managed heap!

Il vantaggio di IDisposable, però, non è solo questo; per il GC distruggere una classe che presenta un finalizzatore è cosa parecchio onerosa: essa infatti necessita di due cicli di garbage collecting per essere distrutta! Nel primo viene creata una reference alla stessa in una coda chiamata FReachableQueue per eseguirne il Finalizer, nel secondo viene effettivamente liberata la memoria. Con IDisposable, invece, dato che il finalizzatore non deve più essere invocato dal GC (perché l'abbiamo esplicitamente eseguito noi da codice), il GC può distruggere l'oggetto direttamente. Ecco perché una best-practice è quella di terminare ogni metodo Dispose con l'istruzione

GC.SuppressFinalize(this)

con la quale viene indicato al GC che non è più necessario eseguire il finalizer per questa specifica istanza.

Spero di non aver scritto castronerie!

Ciauuu!

powered by IMHO 1.3

4 Comments Filed Under [ .Net 2.0 ]
[OT] Il Crad a 70 anni

Qualche giorno fa Punto Informatico ha pubblicato un articolo su un software in grado di "invecchiare" le fotografie. Basta collegarsi a questo sito, rispondere ad alcune domande ed inviare una foto.

Io l'ho fatto, ho atteso un po' per la risposta, ma il risultato è... come dire...

Per vederlo basta un click qui!

powered by IMHO 1.3

5 Comments Filed Under [ Off topic ]
Bloggare su UGI con Word2007?

Purtroppo non si può (ancora?)...

Funziona con MSN Spaces, Community Server, Sharepoint 2K7, ecc.ecc... ma per quanto riguarda .Text

Not Supported in Beta 2 will be supported in the future.

Peccato

powered by IMHO 1.3

2 Comments Filed Under [ Misc ]
Stanchi di Javascript? Provate Script#

Premetto che non l'ho provato, provo a darci un'occhiata stasera, ma l'idea del bravo Nikhil Kothari mi intriga parecchio: un compilatore C# che invece di generare IL spara fuori del Javascript, con il vantaggio di avere a monte la possibilità di scrivere script lato client con un linguaggio Object Oriented, avere membri pubblici, privati, virtuali, interfacce, supporto per Intellisense e Refactoring di VS2005, ecc.ecc.ecc. Mica male!! Chissà come si comporta in quanto a compatibilità con i diversi browser!

BTW, trovate un piccolo articolo introduttivo, il download e anche un filmato a questo link!

powered by IMHO 1.3

One Comment Filed Under [ .Net 2.0 ASP.NET 2.0 ]
WOWOWO!! Il mio primo articolo!!

Dopo un minuscolo Tip pubblicato qualche giorno fa (un altro è in arrivo!!), oggi è uscito il mio primo articolo UGIdotNet-tiano! Riguarda la creazione di un'estensione per il class designer di VS2005 ed è frutto di un paio di giorni di ricerche e prove intensive, vista la scarsa documentazione (facciamo pure "quasi nulla"?) che c'è in giro sull'argomento!

Intanto ringrazio tantissimo Lorenzo "Genio Del Male" Barbieri, perché mi ha proposto lui di scriverlo e perché ha avuto tanta pazienza nella fase di editing, poi... Beh.. se avete 5 minuti di tempo, provate a darci un'occhiata, mi farebbe molto piacere avere qualche riscontro! Lo trovate a questo link!

powered by IMHO 1.3

Solution Architect Forum: The Day After (o giù di lì)

Mezzanotte e cinquanta minuti: sono a casa a Teramo da un'oretta circa, dopo un viaggio fatto di code, code e ancora code (meglio che non esterni i miei pensieri su Autostrade S.p.A. )

Pensieri sparsi e confusi sul Solution Architect Forum appena trascorso.... Iniziamo con le questioni tecniche: dell'evento mi è piaciuto parecchio il messaggio che IngoBeat hanno voluto trasmettere, e cioé che per produrre software complesso il recupero del codice e, quando possibile, la sua generazione automatizzata sono assolutamente indispensabili. Bello il parallelo tra lo sviluppo software e la costruzione di un Airbus A380 (soprattutto lo unit testing dei motori, poveri polletti fagocitati dalle eliche ), interessante GAT4WS mostrato da Beat, interessantissime la overview e la demo di Ingo sui DSL Tools, e pensare che volevo iniziare a guardarli proprio in questi giorni... Janky è ancora lì che rosica per non essere venuto!

Last but not least, un grazie di cuore ai ragazzi di UGI, Markino, Lorenzo, Mario, Simone, Mauro, anche Ricky, va, sebbene le sue radici affondino altrove , avrò sicuramente dimenticato qualcuno e me ne scuso, ma abbiate pietà, sono cotto!! Dicevo, grazie a tutti perché prima di oggi li avevo visti di persona solo una volta in vita mia e nonostante ciò son stato sempre in ottima compagnia! E' spettacolare andare da solo ad un evento a 500 KM da casa e ritrovarsi a chiacchierare, scherzare, pranzare insieme, apprezzare le hostess in tailleur come se mi recassi lì ogni giorno. Mi è dispiaciuto tantissimo non aderire all'invito di Lorenzo per l'aperitivo, ma se avessi accettato ora probabilmente sarei ancora in strada!

Ora c'è Morfeo che mi chiama, notte a tutti! Zzzzzzz.......

powered by IMHO 1.3

Add Comment Filed Under [ Misc ]
ScottGu, LINQ e ASP.NET

A questo link trovate un interessante articolo introduttivo a LINQ da parte di niente-popò-di-meno-che ScottGu, e scusate se è poco

powered by IMHO 1.3

[OT] In America sono veramente avanti...
...anche quando si tratta di dar fastidio alla gente.

Click sul titolo per leggere!
3 Comments Filed Under [ Off topic ]
Wow, mi hanno moderato l'articolone su CodeProject!

Oggi mi è arrivata una mail che mi annunciava che l'articolo sulle Crad's Actions che ho pubblicato su CodeProject è stato moderato e non è più una unedited reader contribution.

Questa sì che è una soddisfazione, considerando che è lì da meno di un mese e che molti articoli attendono il lavoro dell'editor da parecchio tempo in più! L'unico rammarico è che, d'ora in poi, non posso più modificarne il testo a piacimento, dato che ciò che invierò dovrà essere validato prima di andare online; peccato, perché proprio in questo weekend avrei voluto rilasciare un aggiornamento per correggere un paio di piccoli bug, vorrà dire che li pubblicherò in anteprima su UGI!

powered by IMHO 1.3

Barra rossa, scrivo codice, barra verde

Nel tempo libero sto portando avanti un piccolo progetto e ne approfitto per fare qualche esperimento, così imparo anche qualcosa! 

Già in passato avevo scritto un post a proposito della mia "riscoperta" dello unit testing, ora invece, tra le varie cose, sto provando a seguire il più possibile le regole del Test Driven Development. Il primo bilancio è sicuramente positivo, anche se ammetto di trovarmi alle volte un tantinello spaesato, però provo costantemente la sensazione, quando lavoro, di procedere in maniera più "guidata", facendo meno supposizioni.

A questo punto sono curioso, e tanto, di scoprire come possa evolvere la situazione all'aumentare della complessità. Intanto sto leggiucchiando qualcosa in giro per la rete (ho trovato quest'articolo su CodeProject, ad esempio, o alcune slide qui), ma penso che prima o poi comprerò un bel libro da leggere la sera prima di addormentarmi

powered by IMHO 1.3

8 Comments Filed Under [ Misc ]
La strana storia di ApplicationException

Tra le varie best practice di .NET, una che ho sentito n-mila volte e ho metabolizzato senza (mea culpa) indagare ulteriormente è quella di ereditare ogni custom exception dalla classe ApplicationException piuttosto che direttamente da System.Exception.

Ok, riconosco l'errore di essere stato poco curioso, ma ieri sera, scoprendo qual è la vera realtà dei fatti, non ho potuto far a meno di sorriderci un po' su! Parola di Jeffrey Richter, l'intenzione originaria di Microsoft era tutt'altro che sbagliata: le eccezioni sollevate dall'applicazione dovevano ereditare tutte da System.ApplicationException, mentre quelle sollevate dal CLR in risposta ad errori di sistema dovevano appartenere alla gerarchia di System.SystemException, in modo da poterne distinguere "a monte" la natura.

La cosa bella è che, purtroppo, le classi stesse del Framework non seguono questa guideline: se da un lato FormatException deriva da SystemException, dall'altro WaitHandleCannotBeOpenedException ha come base class ApplicationException, mentre IsolatedStorageException deriva direttamente da System.Exception.

Morale: SystemException e ApplicationException son lì solo per retrocompatibilità, ma lo stesso buon Jeffrey consiglia di ereditare direttamente da Exception e buona notte al secchio

powered by IMHO 1.3

One Comment Filed Under [ .Net 2.0 ]
Another Crad's Actions update!

Crad's Actions 1.1.1.0 have been released. You can find more information af the project page.

Filed Under [ Crad's Actions ]
Weekend trascorso scrivendo (+ pensieri sparsi)

Già, purtroppo non codice! Ho infatti sfruttato il ponte del primo maggio pubblicando un aggiornamento per il mio articolo su CodeProject e scrivendo un paio di testi nuovi. Che dire... non sono un grande amante di tutto ciò, lo ammetto, anche se poi ricevere feedback da chi ha dedicato qualche minuto a guardare il tuo codice è sempre un qualcosa che ti riempie d'orgoglio!

Per chi ha scaricato le Crad's Actions, ho rilasciato una nuova versione che offre un maggiore supporto all'espandibilità; la cosa che mi dà in assoluto più soddisfazione è la nuova implementazione del CollectionEditor, che ora è capace di "scoprire" quali sono le action presenti nel progetto in corso e in tutti quelli referenziati. Non è stato banalissimo e forse ne leggerete qualcosa di più tra qualche giorno (spero) 

Oltre tutto ciò, sono riuscito a leggere parecchie pagine di CLR via C# che oramai volge al termine e quindi si presta ad una piccola analisi. Beh... il responso è assolutamente positivo, consiglio a tutti di acquistarlo perché si addentra in tutti quei meccanismi che si mettono in moto ogni volta che dichiariamo un delegate, solleviamo un'eccezione o effettuiamo un cast da int a IComparable, che quindi ogni bravo sviluppatore, IMHO, dovrebbe conoscere nei dettagli.

powered by IMHO 1.3