我的应用程序中包含以下代码,以帮助我检查ViewModels是否已正确完成:

#if DEBUG
    static int openViewModels = 0;

    protected AbstractViewModel()
    {
        openViewModels++;
    }

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


我的应用程序中的所有viewModels都源自此类。我发现随着时间的推移,openViewModels会增加,这意味着某些viewModels无法完成。

我很难弄清为什么-我盯着我的代码,但看不到是什么原因导致某些对象滞留。是否有任何工具或过程可以帮助我确定使这些对象无法最终确定的原因?

最佳答案

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

其次,最终确定是不确定的。除非您强制执行,否则不应该这样做。您不应期望它们在任何特定的时间范围内清理干净,尤其是如果您有大量可用内存时。终结是内存压力的一个因素。

10-04 23:33