Утечка памяти и слабые ссылки - PullRequest
3 голосов
/ 27 октября 2011

У меня проблема, которая выглядит как утечка памяти в одном из моих приложений (приложение использует больше памяти с течением времени, после примерно недели работы оно зависает).

Я обнаружили исправлены некоторые утечки, связанные с написанными мною классами (сравнение дампов кучи, взятых с помощью sos.dll, быстро выявило их), и их число больше не увеличивается.

В настоящее время единственное, что резко увеличивается со временем, этоWeakReference экземпляров, которые увеличиваются с постоянной скоростью 1000 новых WeakReference экземпляров в минуту.

Мой код не использует WeakReference напрямую, я сам их никогда не создаю.

Что может привести к созданию такого количества WeakReference экземпляров?

Я использую VB.NET, Visual Studio 2008 и .NET 3.5

1 Ответ

8 голосов
/ 27 октября 2011

Да, это довольно печально известная утечка в сборках VB.NET.Это вызвано слабыми ссылками, которые отслеживают события, объявленные с ключевым словом WithEvents.Это отслеживание сделано для поддержки редактирования и продолжения.Он пропускает один экземпляр WeakReference для каждого события WithEvents, объявленного в классе.Отладчик должен быть присоединен для освобождения этих объектов WeakReference.

Обходной путь прост.Поставляйте сборку Release, а не сборку Debug.

...