использование ключевого слова занимает меньше места? - PullRequest
13 голосов
/ 08 ноября 2011

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

 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();

Ответы [ 2 ]

25 голосов
/ 08 ноября 2011

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

Использование оператора формы:

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 C #, 4-е издание


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

7 голосов
/ 08 ноября 2011

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

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

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

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

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


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...