Aller au contenu

IDisposable

Contexte : IDisposable est une interface qui fournit un mécanisme pour libérer les ressources non managées (handles de fichiers, connexions bases de données, sockets) de manière déterministe. Le GC .NET ne nettoie que la mémoire managée ; les ressources non managées doivent être libérées explicitement. IDisposable définit une unique méthode Dispose(). Lorsque vous implémentez IDisposable, vous devez également implémenter un finaliseur (destructeur) comme filet de sécurité.

using System;
using System.IO;
public class ResourceHolder : IDisposable
{
private FileStream _fileStream;
private bool _disposed = false;
public ResourceHolder(string path)
{
_fileStream = File.OpenRead(path);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
_fileStream?.Dispose();
}
_disposed = true;
}
}
~ResourceHolder()
{
Dispose(false);
}
}
Fenêtre de terminal
// Pas de sortie directe ; Dispose() est appelé automatiquement à la fin d'un bloc using.
  • Appelez toujours Dispose() quand vous avez fini avec un objet IDisposable.
  • Utilisez l’instruction using pour garantir la libération même en cas d’exception.

Entrées/sorties fichier – Chaque StreamReader, FileStream ou SqlConnection implémente IDisposable. Disposez-les toujours pour libérer les handles du système d’exploitation.
Voir documentation .NET sur IDisposable.