完成后如何取消类的实例 操作

本文关键字:实例 操作 取消 何取消 | 更新日期: 2023-09-27 18:33:41

我在我的项目中使用 MVVM。首先,请参阅编辑操作:

[HttpGet]
    public async virtual Task<ActionResult> Edit(int code)
    {
        var attributeModel = await _attributeService.GetAsync(code);
        EditAttributeViewModel attributeViewModel = mapper.Map(attributeModel, new EditAttributeViewModel());
        return View(attributeViewModel);
    }

在视图模型中,我像这样计算实例:

 public class EditAttributeViewModel
{
    private static int counter = 0;
    public EditAttributeViewModel()
    {
        Interlocked.Increment(ref counter);
    }
    ~EditAttributeViewModel()
    {
        Interlocked.Decrement(ref counter);
    }
}

当完成Edit动作并更改控制器时,再次回到那个Edit动作,当看到counter总是增加时,当我在页面之间移动时。我不想使用太多内存,为此我在控制器中Override Dispose方法如下:

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);
    }

但它不会改变,计数器总是增加.

如何清除实例

完成后如何取消类的实例 操作

时 操作方法

与C++不同,您无法按需释放内存。Dispose 模式用于释放非托管资源(文件处理程序、连接或非托管的图片,读取:在 .Net 内存管理之外保留的资源以及使用 IntPtr 的任何资源)。

您所能做的就是将所有引用设置为 null 并对类中的所有一次性类型调用 .Dispose(),然后到垃圾回收拾取它们。

不依赖于应用程序如何利用内存,这可能迟早会发生。如果您的应用程序经常实例化和取消引用对象,这可能会更快地发生,如果您的应用程序不这样做,则可能需要更长的时间。

不应该依赖于终结器(在C++中看起来像解构器)被调用或何时调用。GC 在清理它时调用它。但前提是您尚未禁止显示它(通常在 Dispose 方法中执行此操作)。

因为counter被标记为static,所以它将在应用程序的整个生命周期中持续存在(与类的特定实例无关)。如果这不是所需的结果,并且您希望类的每个实例都有一个新的 counter 实例,请删除 static 关键字。

 private int counter = 0;

这将为每个 EditAttributeViewModel 实例创建一个新的 counter 实例。