Alcune semplici regole per evitare Memory Leaks con Distruttori e Dispose

Supponiamo che ci siano due classi che allocano risorse, la prima ha bisogno di implementare un distruttore ed il metodo Dispose, mentre la seconda no. La differenza sta che la prima classe alloca delle risorse nel costruttore e non le cancella immediatamente. Diversamente, la seconda alloca risorse in una funzione membro e si prende cura di liberarle prima di uscire (utilizzando un blocco di codice finally), così che l’autore della seconda classe non ha la necessità di implementare il metodo Dispose e nemmeno il distruttore.

Segue uno schema ipotetico della classe che deve implementare Dispose.

class MustDispose

{

   public MustDispose()

   {

      // Create a 3rd party object

      // Open a file handle

      // Allocate some memory

      // Open a database connection

      // Open a network port

   }

 

   ~MustDispose()

   {

      // Customized destructor for this class

      // if (3rd party object != null) free the 3rd party object

      // if (file handle != null) close the file handle

      // if (memory != null) free the memory

      // if (connection != null) close the database connection

      // if (port open) close the network port

   }

 

   public void Dispose()

   {

      // because this class needs a destructor, it also needs this

      // idiomatic Dispose method

      Finalize();

      System.GC.SuppressFinalize(this);

   }

}

Segue uno schema ipotetico della classe che non deve implementare Dispose.

class NoDispose

{

   public NoDispose()

   {

      // this class has an uninteresting constructor so it doesn't need

      // a destructor or Dispose

   }

 

   public void MemberFuncThatCleansUp()

   {

      try

      {

         // create a 3rd party object

         // open a file handle

         // allocate some memory

         // open a database connection

         // open a network port

      }

      finally

      {

         // if (3rd party object != null) free the 3rd party object

         // if (file handle != null) close the file handle

         // if (memory != null) free the memory

         // if (connection != null) close the database connection

         // if (port open) close the network port

      }

   }

}

Se una classe necessita di un distruttore è necessario scriverne uno personalizzato. In ogni caso, il metodo Dispose proviene da un idioma di C# per una classe che necessita di un distruttore:

public void Dispose()

{

   Finalize();

   System.GC.SuppressFinalize(this);

}

 

Quando chiamare il metodo Dispose

Chiamare il metodo Dispose su un oggetto creato se l’autore ha provvisto l’oggetto del metodo Dispose. Chiamare Dispose anche quando si fa uso dell’oggetto, specialmente se l’oggetto rimane nello scope durante una lunga operazione o se l’oggetto alloca molte risorse per il proprio utilizzo.

Infine, segue un tip di C# che chiama Dispose:

MustDispose obj = new MustDispose;

try

{

  // use the object

}

finally

{

   if (obj != null)

   ((IDisposable)obj).Dispose();

}

 

Print | posted on sabato 29 ottobre 2005 17:47

Comments on this post

# Distruttori e Dispose in .NET

Requesting Gravatar...
Left by Riccardo Mariotti on ott 29, 2005 3:50

# re: Alcune semplici regole per evitare Memory Leaks con Distruttori e Dispose

Requesting Gravatar...
Per evitare memory leak è importante anche evitare riferimenti circolari. Un articolo che spiega il problema è riportato qui:
http://programminghacks.net/2009/11/27/memory-leak-in-c-o-java-garbage-collection-weakreference/
Left by Ricibald on dic 02, 2009 4:54

# re: Alcune semplici regole per evitare Memory Leaks con Distruttori e Dispose

Left by Julie on mar 23, 2011 10:23

# re: Alcune semplici regole per evitare Memory Leaks con Distruttori e Dispose

Requesting Gravatar...
You are obviously, a real master of dissertation international referring to this good post writing but if you are willing to opt for the buy thesis service, I would advice you to find a perfect one.
Left by dissertation writing on lug 09, 2011 7:54

# re: Alcune semplici regole per evitare Memory Leaks con Distruttori e Dispose

Requesting Gravatar...
Superior topic close to school! No doubts all of us faced several difficulties with dissertation service. It is especially hard when you have opposite privilege in life. I have had the similar troubles until I have found a company provide skilled writing services.
Left by dissertation writing on gen 09, 2012 4:45

# re: Alcune semplici regole per evitare Memory Leaks con Distruttori e Dispose

Requesting Gravatar...
Various fields of human’s life need different professionals. Thence, a thesis writing service employs the dissertation proposals creators. Your superior story just about this topic match all the requirements of this branch. Furthermore, you should easily work as a writer.
Left by dissertation on gen 14, 2012 4:16

# Sohbet Hattı

Requesting Gravatar...
Sohbet Hattı ile gecelerin ve gündüzlerin birbirine karışacak. Zevkten dört köşe olacaksın.
Left by Sohbet Hattı on apr 16, 2012 2:10

# Sohbet Hattı

Requesting Gravatar...
Sohbet Hattında Turkcell kalitesi. En ucuz ve güzel kızalrın oldugu Sohbet Hattı.
Left by Sohbet Hattı on apr 16, 2012 2:12

# Dizin Siteleri

Requesting Gravatar...
Dizin sitesi kodsuz ve ücretsiz ve eklentisiz çalışmaktadır. Konunun devamı için Site Ekle tıklatın.
Left by Dizin Siteleri on apr 16, 2012 2:13

# Sohbet Hattı

Requesting Gravatar...
Sohbet Hattı en sıcak ateşli sohbet burada Sohbet Hattında seni bekliyor sende şimdi sohbet hatlarını ara bu heyecanı paylaş...
Left by Sohbet Hattı on apr 19, 2012 10:39

# re: Alcune semplici regole per evitare Memory Leaks con Distruttori e Dispose

Requesting Gravatar...
You ought to finish good quality course work papers to be a good student. Nevertheless, you are able to buy coursework help when you are not a master.
Left by courseworks on apr 23, 2012 1:11

# re: Alcune semplici regole per evitare Memory Leaks con Distruttori e Dispose

Requesting Gravatar...
At present, you should not bother about academic research papers creating just because there's not necessary to complete them yourself. You can just write buy affordable term paper in search engine. You will find quantities of academic papers writing sites!
Left by perfect custom papers on apr 23, 2012 1:51

# re: Alcune semplici regole per evitare Memory Leaks con Distruttori e Dispose

Requesting Gravatar...
Nowadays college students turn to firms that suggest essays and paper writing assistance. Go here "bestwritingservice.com" and buy essay online that for certain will help you to receive the highest points.
Left by essay service on lug 15, 2012 3:30

# re: Alcune semplici regole per evitare Memory Leaks con Distruttori e Dispose

Requesting Gravatar...
Every high school student may get a crisis of his study connected with essays completing. Therefore, students have no any other way out than to buy research papers on line.
Left by research essay for sale on ott 01, 2012 3:14
Comments have been closed on this topic.