Я много читал об этой теме, и все же у меня нет четкого пути к продолжению. Может ли кто-нибудь указать на какой-то ресурс (или объяснить), который показывает подробный шаг, как найти причину, по которой некоторые объекты dctor не вызываются.Решение проблем с утечкой памяти
в основном моя логика для тестирования утечки это (WPF приложение):
- создать некоторый вид/ViewModel
- закрыть окно
- вызова GC.Collect()
После несколько секунд обычно называется dctor в классе ViewModel, но в моем приложении никогда не вызывается. Я хотел бы знать, какой объект ссылается на него в то время, поскольку, на мой взгляд, это способ найти причину утечки памяти.
В этих классах нет неуправляемых ресурсов и не реализовано IDisposable
, что означает отсутствие вызова SupressFinalize для предотвращения выполнения дескриптора.
Редактировать: ViewModel извлекается через свойство Static в ViewModelLocator и добавляется список. Это требуется TabControl, для которого требуется набор моделей просмотра для привязки. View и ViewModel подключаются через DataTemplate.
Этот вопрос трудно ответить, не зная, как вы используете свой viewModel – mydogisbox
Apologiez. Я думал, что метод обнаружения утечки памяти для большинства сценариев одинаковый. Я добавляю информацию о том, как использовать VM – Goran
На стороне примечания, если ваши классы не используют неуправляемые ресурсы, вам действительно не нужно реализовывать финализатор для них; состояние объекта во время финализации таково, что вы не должны предполагать, что вы можете получить доступ к любым управляемым ссылкам, которые ранее были действительными для класса во время его жизни. Финализаторы предназначены только для неуправляемой очистки (а затем действительно только в качестве резервной копии для надлежащего детерминированного удаления). –