Я работаю со следующими: VS 2010, .Net 4, WPF и .Net Memory Profiler версии 4.6.40.0 Pro. Все они работают на 64-битной Win7. Я использовал .Net Memory Profiler для отслеживания утечек памяти и нашел ту, которую я не понимаю, хотя, похоже, я ее исправил. У нас есть элемент управления, содержащий три объекта ContentPresenter. Если я установлю для свойства Content объектов ContentPresenter значение null в нашем методе Cleanup, тогда элемент управления вообще не протечет. Если я не обнулю свойства содержимого, мы получим большую утечку (около 3,5 МБ на каждый тест).
Результаты, которые я видел в поиске в Google, не помогли решить эту проблему напрямую. Документация по ContentPresenter мне тоже не помогла. Кто-нибудь здесь понимает, почему обнуление содержимого устранило утечку? Есть ли лучший способ добиться того же?
Замечу, что один из ContentPresenter динамически переключается между WindowsFormsHost и BitmapSource для решения проблем с воздушным пространством.
Обновление: вот соответствующие части очистки:
Во-первых, обнулите ContentPresenter's
AddressGridPlaceholder.Content = null;
AddressFormPlaceholder.Content = null;
MapControlPlaceholder.Content = null;
Затем очистите WindowsFormsHost
if (_hoster != null)
{
_hoster.Child = null; // Remove the map control reference first
_hoster.Dispose(); // Then Dispose
}