Сегодня я поговорил с моим коллегой, который сказал, что она только что узнала причину использования инструкции using
.
//Using keyword is used to clean up resources that require disposal (IDisposable interface).
using (StreamReader reader = new StreamReader(@"C:\test.txt"))
{
string line = reader.ReadLine();
}
Я указал, что объект помечен как "Может быть удален", но не на самом деле утилизирован и собран мусором, если GC не решит это сделать.
Она ответила, что объект будет удален автоматически после того, как использование оператора заканчивается, потому что оператор using переводится в блок try-catch-finally. Таким образом, объект должен располагаться в самом конце инструкции using.
Я был смущен этим, потому что знаю, что использование оператора using
не гарантирует, что объект получает GC-сбор. Все, что происходит, - это вызов метода Dispose()
. ГК решает, когда GC это независимо. Но когда она попросила доказательства, я не смог найти.
Кто-нибудь знает, как это работает, и как это доказать?