Если вы прочитаете C # для программистов , вы поймете, что блок finally предназначен для оптимизации приложения и предотвращения утечки памяти.
CLR не полностью устраняет утечки ... утечки памяти могут возникать, если программа случайно хранит ссылки на нежелательные объекты
Например, когда вы открываете соединение с файлом или базой данных, ваш компьютер будет выделять память для обслуживания этой транзакции, и эта память будет сохраняться только после выполнения команды disposed или close. но если во время транзакции произошла ошибка, исходящая команда будет прервана, если только она не была внутри блока try.. finally..
.
catch
отличался от finally
в том смысле, что catch был спроектирован так, чтобы вы могли самостоятельно обрабатывать / обрабатывать или интерпретировать ошибку. Думайте об этом как о человеке, который говорит вам: "Эй, я поймал некоторых плохих парней, что ты хочешь, чтобы я сделал с ними?"
в то время как finally
был разработан, чтобы убедиться, что ваши ресурсы были правильно размещены. Подумайте о ком-то, что, есть ли плохие парни, он позаботится о том, чтобы ваша собственность была в безопасности.
И вы должны позволить этим двум работать вместе навсегда.
например:
try
{
StreamReader reader=new StreamReader("myfile.txt");
//do other stuff
}
catch(Exception ex){
// Create log, or show notification
generic.Createlog("Error", ex.message);
}
finally // Will execute despite any exception
{
reader.Close();
}