Я пытаюсь решить некоторые проблемы утечки памяти в приложении, и я действительно надеюсь, что кто-то здесь может предложить мне некоторые идеи, которые помогут. Я возился с этим весь день и боюсь, что застрял полностью.
Приложение, которое я устраняю, изначально работает нормально, но оно становится вялым и, возможно, даже зависает, если оно используется после простоя в течение пары часов. Я предполагаю, что это происходит из-за некоторой утечки памяти, которая усугубляется со временем. Насколько я знаю, нет внутренних процессов, таких как таймеры или бесконечные циклы и т. Д., Которые могли бы объяснить утечку памяти, но симптомы воспроизводимы, поэтому что-то определенно происходит.
Чтобы попытаться это решить, я скачал и установил пробную версию .NET Memory Profiler. К сожалению, я не совсем уверен, как интерпретировать полученные результаты. Насколько я могу судить, классы, которые мне кажутся наиболее проблемными, - это системные классы, такие как System.Version и System.Object []. Я думаю, что это основано на предположении, что «данные для поиска» - это число недоступных экземпляров и байтов, сообщенных профилировщиком.
Вот несколько примеров данных, похожих на то, что я видел:
- Пространство имен: система
- Имя класса: версия
- Живые экземпляры ...
- Итого: 2
- Дельта: 0
- Live Bytes ...
- Итого: 48
- Новое: 48
- Макс .: 24
- Дельта: 0
- недостижим ...
- Экземпляры: 15,556
- Байт: 373 344
- Пространство имен: система
- Имя класса: Object []
- Живые экземпляры ...
- Всего: 1198
- Дельта: 0
- Live Bytes ...
- Итого: 117 916
- Новый: 117 916
- Макс .: 7,016
- Дельта: 0
- недостижим ...
- Экземпляры: 3054
- Байт: 204 592
Если я читаю это право, две самые большие проблемы, с которыми я сталкиваюсь, это то, что у меня есть более 15 000 экземпляров версий сборок и более 3000 объектов, которые «недоступны», хотя по общему признанию, я не совсем уверен, что имеется в виду под « недостижим ".
Итак, мои конкретные вопросы:
- Может кто-нибудь сказать, правильно ли я читаю данные .Net Memory Profiler?
- Если я правильно читаю данные, что может заставить мое приложение генерировать больше экземпляров версий сборки и больше экземпляров объектов, пока конечный пользователь не взаимодействует с ними?