调试对象无法完成

本文关键字:对象 调试 | 更新日期: 2023-09-27 18:32:59

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

#if DEBUG
    static int openViewModels = 0;
    protected AbstractViewModel()
    {
        openViewModels++;
    }
    ~AbstractViewModel()
    {
        openViewModels--;
        System.Diagnostics.Debug.WriteLine(openViewModels);
    }
#endif

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

我很难弄清楚为什么会这样 - 我盯着我的代码,但我看不出是什么导致某些对象留在身边。是否有任何工具或程序可以帮助我找出阻止这些对象最终确定的原因?

调试对象无法完成

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

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

不保证对象是最终确定的。如果需要可靠的定型,则应实现IDisposable .