Как я могу найти утечку памяти моего приложения? - PullRequest
0 голосов
/ 05 сентября 2018

Я написал службу Windows, используя технологии .NET. Я использую инструмент JetBrains dotMemory, чтобы понять утечку памяти.

Я получаю отчет ниже, но как новая пчела, я не уверен, как это прочитать.

enter image description here

System Пространство имен показывает больше выживших байтов. Но как узнать, какой код является основной причиной утечки памяти?

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Вы должны посмотреть на оставшиеся байты / оставшиеся байты, которые укажут вам на базовый экземпляр или корневой объект создания. Решение о том, следует ли сохранять указанный объект в памяти или нет, зависит от дизайна и реализации вашего приложения.

Если вы идентифицируете корневой объект создания, вам следует попытаться отделить связь и создать сборщик мусора .net для автоматического сбора нежелательных объектов.

Нет фиксированных флажков для выявления утечек памяти.

0 голосов
/ 12 сентября 2018

Сначала вы должны решить, какую проблему с памятью вы найдете

  1. Постоянно растущее потребление памяти - получите базовый моментальный снимок, получите другой после увеличения потребления памяти, откройте сравнение снимков, откройте новые объекты, созданные после первого снимка, посмотрите на них, чтобы понять, какие из них следует собирать.

  2. Убедитесь, что какой-то ключевой объект не протекает - установите ваше приложение в состояние, когда какой-либо объект не должен быть представлен в памяти (например, закройте некоторое представление), получите снимок, используя фильтр в представлении «Группировка по типу» чтобы убедиться, что этот объект не представлен в памяти.

  3. Трафик памяти - при необходимости получите базовый снимок, запустите действие / алгоритм в вашем приложении, которое вы хотите проверить, получите снимок. Откройте представление «Трафик памяти», посмотрите, выглядит ли оно так, как вы реализовали или больше объектов, чем вы ожидали, были выделены во время действия.

Возьмите эту бесплатную книгу для других возможных проблем с памятью.

P.S. Только вы, как автор приложения, можете ответить на вопрос, является ли это проблемой или это так, как задумано.

0 голосов
/ 07 сентября 2018

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

Пример: myClass.DoSomething + = Event_DoSomething

Вы должны убедиться, что ресурсы очищаются, как показано ниже:

myClass.DoSomething - = Event_DoSomething

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