У меня небольшая утечка памяти в моем приложении, и мне было интересно, что лучше всего, когда я закончу обработку 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 вместо этого? Или закрывает оба здесь достаточно хорошо?
Благодаря
Вы уверены, что утечка памяти присутствует в коде, который вы опубликовали, выполнили ли вы профилирование с помощью инструментов профилирования Visual Studio? Вам не нужно явно обращаться к методам Dispose и Close при использовании оператора using, проверьте это сообщение об этом http://stackoverflow.com/questions/11968289/memorystream-in-using-statement-do-i-need-to-call-close –
I Первоначально предполагалось, что утечка памяти была вызвана FileSystemWatcher, которая, по-видимому, имеет проблема утечки памяти в .Net 4. Я обновляю до 4.5, но утечка памяти все еще происходит. Это действительно единственная часть моего приложения. –
Эндрю Бернс, пожалуйста, попробуйте запустить диагностику памяти в 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 –