2016-09-10 2 views
-2

У меня небольшая утечка памяти в моем приложении, и мне было интересно, что лучше всего, когда я закончу обработку FileStream и Streamreader.Должен ли я вызвать Dispose после того, как я закончил с моим файловым потоком

вот мой код:

using (var stream = File.Open(e.FullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using (var sr = new StreamReader(stream)) 
{ 
    //do what I need with the file 

    sr.Close(); 
    stream.Close(); 
} 

Должен ли я назвать Dispose на объекте потока и StreamReader Object вместо этого? Или закрывает оба здесь достаточно хорошо?

Благодаря

+0

Вы уверены, что утечка памяти присутствует в коде, который вы опубликовали, выполнили ли вы профилирование с помощью инструментов профилирования Visual Studio? Вам не нужно явно обращаться к методам Dispose и Close при использовании оператора using, проверьте это сообщение об этом http://stackoverflow.com/questions/11968289/memorystream-in-using-statement-do-i-need-to-call-close –

+0

I Первоначально предполагалось, что утечка памяти была вызвана FileSystemWatcher, которая, по-видимому, имеет проблема утечки памяти в .Net 4. Я обновляю до 4.5, но утечка памяти все еще происходит. Это действительно единственная часть моего приложения. –

+0

Эндрю Бернс, пожалуйста, попробуйте запустить диагностику памяти в Visual Studio, чтобы найти точные строки кода, в которых происходит утечка памяти. Https://blogs.msdn.microsoft.com/visualstudioalm/2014/04/02/diagnosing -memory-issues-with-the-new-memory-usage-tool-in-visual-studio/ https://www.youtube.com/watch?v=lU_YZtvslnI https://dzone.com/ статьи/профилирование-приложения зрительно-1 –

ответ

2

Вам не нужно звонить Close() или Dispose() вообще, так как вы обернут свои потоки в using block.

Блок using автоматически удалит потоки для вас, когда вы достигнете конца блока.

Ваша утечка памяти, скорее всего, находится в другом месте.

Смежные вопросы