Использование деструкторов (так называемых финализаторов) не очень хороший способ работы в C #.Нет никаких гарантий, что финализатор когда-либо будет работать, даже если вы явно вызовете сборщик мусора.Вы также не должны пытаться форсировать сборку мусора, потому что это, вероятно, окажет негативное влияние на производительность вашего приложения в целом.
Вместо этого, если вам нужно явно освободить ресурсы, принадлежащие объекту, вы должны реализовать IDisposable и поместите логику очистки в метод Dispose ().И наоборот, когда вы используете объект, который реализует IDisposable, вы всегда должны позаботиться о вызове его метода Dispose (), когда закончите с ним.C # предоставляет «использование» для этой цели.
Многие классы, которые выполняют ввод / вывод (например, Streams), реализуют IDisposable.Вот пример использования FileStream для чтения текстового файла.Обратите внимание на выражение «using», чтобы убедиться, что FileStream удаляется после того, как мы закончили с ним:
using (FileStream fs = File.OpenRead("C:\\temp\\myfile.txt"))
{
// Read a text file 1024 bytes at a time and write it to the console
byte[] b = new byte[1024];
while (fs.Read(b, 0, b.Length) > 0)
{
Console.WriteLine(Encoding.UTF8.GetString(b));
}
} // Dispose() is called automatically here
Вышеуказанный код эквивалентен этому:
FileStream fs = File.OpenRead("C:\\temp\\myfile.txt"))
try
{
// Read a text file 1024 bytes at a time and write it to the console
byte[] b = new byte[1024];
while (fs.Read(b, 0, b.Length) > 0)
{
Console.WriteLine(Encoding.UTF8.GetString(b));
}
}
finally
{
fs.Dispose();
}