кодирование этой функции без утечки памяти!- пожалуйста, порекомендуйте - PullRequest
1 голос
/ 20 июля 2010

В следующем примере кода будут уничтожены файловый поток и потоковый ридер или утечки памяти? Можно ли закодировать эту функцию, не вызывая утечек памяти?

  string ReadFile(string strPath)
     {
         using (FileStream fstream = new FileStream(strPath, FileMode.Open))
         {
             using (StreamReader sreader = new StreamReader(fstream))
             {
                return sreader.ReadToEnd().ToString(); //NOTE ITS RETURNED HERE...SO CAN IT GET DISPOSED AFTER THIS LINE?
             }
         }
     }

Спасибо

Ответы [ 2 ]

5 голосов
/ 20 июля 2010

using Директива означает:

try
{
var iDisposable = new IDisposable();
//using iDisposable...
}
finally
{
//here IDisposable's dispose
}

Так что да, и fstream, и sreader будут удалены.

0 голосов
/ 20 июля 2010

Директива using вызывает метод Dispose () независимо от того, возвращается ли экземпляр метода внутри блока или нет.

Обратите внимание, однако, что вы можете использовать метод System.IO.File.ReadAllText для достижения того жес меньшим кодом:

 string ReadFile(string strPath)
 {
     return System.IO.File.ReadAllText(strPath);
 }
...