Отладка объектов не удается завершить?

У меня есть следующий код в моем приложении, чтобы помочь мне проверить правильность завершения ViewModels:

#if DEBUG
    static int openViewModels = 0;

    protected AbstractViewModel()
    {
        openViewModels++;
    }

    ~AbstractViewModel()
    {
        openViewModels--;
        System.Diagnostics.Debug.WriteLine(openViewModels);
    }
#endif

Все viewModels в моем приложении происходят из этого класса. Я обнаружил, что со временем openViewModels увеличивается, подразумевая, что некоторые viewModels не в состоянии завершить.

Мне трудно понять, почему это так - я смотрел на свой код, но не могу понять, что заставляет некоторые объекты оставаться рядом. Существуют ли какие-либо инструменты или процедуры, которые могут помочь мне понять, что мешает завершить эти объекты?

2 ответа

Решение

Во-первых, это открыто для гонок с нитями; которые должны быть Interlocked.Increment(ref openViewModels) а также Interlocked.Decrement(ref openViewModels),

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

Объекты не гарантируются для завершения. Если вам нужно надежное завершение, вы должны реализовать IDisposable,

Другие вопросы по тегам