Проблема выпуска памяти Silverlight WinDg

Я несколько раз успешно использовал WinDbg для отслеживания и устранения утечек памяти (или, точнее, неспособности CLR собирать мусор для освобожденного объекта), но застрял с одним конкретным элементом управления. Элемент управления отображается в дочернем окне, и когда окно закрывается, ссылка на элемент управления остается и не может быть удалена сборщиком мусора. Я решил то, что я считаю большинством проблем, которые могли вызвать утечку, но !gcroot пострадавшего объекта не ясен (по крайней мере, мне) в отношении того, что все еще удерживает этот объект. Вывод всегда один и тот же, независимо от содержимого, представленного в дочернем окне:

ДОМЕН (03FB7238): HANDLE (закреплен): 79b12f8: Корень: 06704260 (System.Object []) -> 05719f00 (System.Collections.Generic.Dictionary2[[System.IntPtr, mscorlib],[System.Object, mscorlib]])-> 067c1310(System.Collections.Generic.Dictionary2 + Entry [[System.IntPtr, mscorlib], [System.Object, mscorlib ]][])-> 064d42b0(System.Windows.Controls.Grid)-> 064d4314(System.Collections.Generic.Dictionary2[[MS.Internal.IManagedPeerBase, System.Windows],[System.Object, mscorlib]])-> 064d4360(System.Collections.Generic.Dictionary2+Entry[[MS.Internal.IManagedPeerBase, System.Windows],[System.Object, mscorlib] ][])-> 064d3860(System.Windows.Controls.Border)-> 064d4218(System.Collections.Generic.Dictionary2[[MS.Internal.IManagedPeerBase, System.Windows],[System.Object, mscorlib]])-> 064d4264(System.Collections.Generic.Dictionary2+Entry[[MS.Internal.IManagedPeerBase, System.Windows],[System.Object, mscorlib]] [])-> 064d3bfc(System.Windows.Controls.ContentPresenter)-> 064d3d64(System.Collections.Generic.Dictionary2[[MS.Internal.IManagedPeerBase, System.Windows],[System.Object, mscorlib]])-> 064d3db0(System.Collections.Generic.Dictionary2+Entry[[MS.Internal.IManagedPeerBase, System.Windows],[System.Object, mscorlib]][ ])-> 064d3dec(System.Collections.Generic.Dictionary2[[System.UInt32, mscorlib],[System.Windows.DependencyObject, System.Windows]])-> 064d3e38(System.Collections.Generic.Dictionary2+Entry[[System.UInt32, mscorlib],[System.Windows.DependencyObject, System.Windows]][])-> 06490b04(Insurer.Analytics.SharedResources.Controls .HistoricalKPIViewerControl)

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

С уважением, Крис


person Chris Newton    schedule 12.01.2011    source источник


Ответы (1)


Статика хранится через закрепленный Object[], поэтому это может быть статическая ссылка на словарь IntPtr, Object укореняющий его. Вы можете попробовать заглянуть в словарь, чтобы узнать, есть ли в других статьях какие-либо полезные подсказки.

Однако, учитывая IntPtr, я ожидаю, что это будет что-то, что среда выполнения Silverlight использует внутри.

Я просматривал корни и искал любые типы, используемые приложением, и проверял, все ли с ними в порядке.

person Brian Rasmussen    schedule 12.01.2011
comment
Спасибо, Брайан, я полагаю, что эта проблема была связана со средой выполнения Silverlight, поэтому мы переработали элемент управления, чтобы обойти эту проблему. Теперь все хорошо, и GC делает свою работу. - person Chris Newton; 14.01.2011