调试对象无法完成?

Oli*_*ver 2 c# debugging finalizer

我的应用程序中有以下代码,以帮助我检查ViewModel是否正确完成:

#if DEBUG
    static int openViewModels = 0;

    protected AbstractViewModel()
    {
        openViewModels++;
    }

    ~AbstractViewModel()
    {
        openViewModels--;
        System.Diagnostics.Debug.WriteLine(openViewModels);
    }
#endif
Run Code Online (Sandbox Code Playgroud)

我的应用程序中的所有viewModel都派生自此类.我发现随着时间的推移,openViewModels增加,暗示某些viewModel无法完成.

我无法弄清楚为什么会这样 - 我盯着我的代码,但我看不出是什么导致一些物体留在身边.是否有任何工具或程序可以帮助我找出阻止这些对象最终确定的内容?

Mar*_*ell 5

首先,这是开放的线程; 应该是Interlocked.Increment(ref openViewModels)Interlocked.Decrement(ref openViewModels).

其次,最终确定是非确定性的.除非你强迫它,否则你不应该强迫它.您不应期望它们在任何特定时间范围内进行清理,尤其是在您有大量可用内存的情况下.最终确定是记忆压力的一个因素.