2

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

#if DEBUG
    static int openViewModels = 0;

    protected AbstractViewModel()
    {
        openViewModels++;
    }

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

我的应用程序中的所有视图模型都派生自此类。我发现随着时间的推移openViewModels会增加,这意味着某些视图模型无法最终确定。

我无法弄清楚为什么会这样 - 我盯着我的代码,但我看不出是什么导致了一些物体留在周围。是否有任何工具或程序可以帮助我找出导致这些对象无法完成的原因?

4

2 回答 2

5

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

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

于 2012-05-02T13:01:27.250 回答
3

不保证最终确定对象。如果你需要可靠的终结,你应该实现IDisposable.

于 2012-05-02T13:04:04.537 回答