Подтвердить что ты не робот

Использование ключевого слова занимает меньше места?

Правда ли, что если я использую следующее, это займет меньше ресурсов, и очистка будет быстрее?

 using (TextReader readLogs = File.OpenText("C:\\FlashAuto\\Temp\\log.txt"))
 {
      //my stuff
 }

по сравнению с:

 TextReader readLogs = new StreamReader("C:\\FlashAuto\\Temp\\log.txt");
 //my stuff
readLogs.Close();
readLogs.Dispose();
4b9b3361

Ответ 1

Разница между этими примерами - не производительность, а безопасность исключений. using создает блок try...finally в фоновом режиме.

A, используя инструкцию вида:

using (ResourceType resource = expression) embedded-statement 

соответствует разложению:

{ 
   ResourceType resource = expression; 
   try {     
     embedded-statement 
   } 
   finally { 
     // Dispose of resource 
   } 
}

Для ссылочного типа удаление происходит через:

finally {  
  if (resource != null) ((System.IDisposable)resource).Dispose(); 
}

Из ECMA-344 С# Language Specification 4th Edition


Вам также не нужно вызывать оба Close и Dispose. Эти функции эквивалентны.

Ответ 2

Первый образец является кратким для:

TextReader readLogs = File.OpenText("C:\\FlashAuto\\Temp\\log.txt");
try
{
    // My stuff
}
finally
{
    if (readLogs != null)
    {
        ((IDisposable)readLogs).Dispose();
    }
}

Не то, чтобы его быстрее, его readLogs будет очищено, даже если произойдет исключение, которое не произойдет в вашем втором примере.

Для получения дополнительной информации см. с помощью Statement (С# Reference).

Нет необходимости вызывать как Close, так и Dispose, внутри метод Close выполняет ту же работу, что и метод Dispose (его просто переименовали, поскольку разработчики используют метод Close).


Обновление: Также нет разницы между вызовами File.OpenText и new StreamReader - internal File.OpenText, которые просто создают и возвращают новый экземпляр StreamReader.