.NET Framework Ressources non gérées


Exemple

Quand on parle du GC et du "tas", on parle vraiment de ce qu'on appelle le tas géré . Les objets sur le segment géré peuvent accéder aux ressources qui ne sont pas sur le segment de mémoire géré, par exemple lors de l'écriture ou de la lecture d'un fichier. Un comportement inattendu peut se produire lorsqu'un fichier est ouvert pour être lu et qu'une exception se produit, empêchant le descripteur de fichier de se fermer normalement. Pour cette raison, .NET exige que les ressources non managées implémentent l'interface IDisposable . Cette interface a une seule méthode appelée Dispose sans paramètres:

public interface IDisposable
{
    Dispose();
} 

Lorsque vous manipulez des ressources non gérées, vous devez vous assurer qu'elles sont correctement éliminées. Vous pouvez le faire en appelant explicitement Dispose() dans un bloc finally ou avec une instruction using .

StreamReader sr; 
string textFromFile;
string filename = "SomeFile.txt";
try 
{
    sr = new StreamReader(filename);
    textFromFile = sr.ReadToEnd();
}
finally
{
    if (sr != null) sr.Dispose();
}

ou

string textFromFile;
string filename = "SomeFile.txt";

using (StreamReader sr = new Streamreader(filename))
{
    textFromFile = sr.ReadToEnd();
}

Cette dernière méthode est la méthode préférée et s’étend automatiquement à la précédente lors de la compilation.