2013-08-11 3 views
1

SrchItemEditDetail является рамка
PageSearchFieldEnumMV это страница
Ниже называется много разли это утечка памяти

private void Revise_Helper(FieldDef SearchFieldSelected, enumAndOr paramAndOr) 
{ 
    PageSearchFieldEnumMV nextPage = new PageSearchFieldEnumMV(SearchFieldSelected, paramAndOr); 
    SrchItemEditDetail.Content = nextPage; 
} 

Другие методы заполнения SrchItemEditDetail.Content с другими страницами.

Это утечка памяти?

Если это так я могу это исправить с

SrchItemEditDetail.Content = null; 

ответ

1

ли это утечка памяти?

Нет, не совсем. Предыдущие страницы будут собраны в мусор.

Если так я могу это исправить с SrchItemEditDetail.Content = null;

То есть мало пользы. В любом случае предыдущий контент станет недоступным.

Но есть потенциальные проблемы. Когда Frame каким-то образом сохраняет другие ссылки на страницу содержимого (например, через событие), тогда у вас может быть утечка.

И когда PageSearchFieldEnumMV хранит ресурс, вы не освобождаете их своевременно. В этом случае или в любом случае, чтобы быть в безопасности, используйте:

PageSearchFieldEnumMV nextPage = new PageSearchFieldEnumMV(...); 

if (SrchItemEditDetail.Content != null) 
    SrchItemEditDetail.Content.Dispose(); // may need a typecast here 

SrchItemEditDetail.Content = nextPage; 
+0

Спасибо, как .NET знает, что предыдущие страницы могут быть собраны в мусор? Необходимо подождать 4 минуты, чтобы принять ответ. – Paparazzi

+0

Когда они становятся «недоступными». Прочитайте, как работает GC в целом. –

+0

Ошибка Объект не поддерживает Dispose. Я буду читать на GC в целом. У меня есть некоторые пользователи, которые сообщают о редких ошибках OOM, но они находятся под Citrix, и я не могу воспроизвести. – Paparazzi

Смежные вопросы