如何正确处置没有IDisposable的对象

时间:2018-04-08 13:44:35

标签: c# asp.net-mvc

在我的ASP.NET MVC应用程序中,我有一个这样的控制器:

[HttpPost]
public ActionResult CreateTestCategory(TestCategory testCategory)
{
    BLL.Admin.CreateTestCategory obj = new BLL.Admin.CreateTestCategory();
    obj.Create(testCategory.TestCategoryName);
    //((IDisposable)obj).Dispose();

    return RedirectToAction("TestCategory", "Admin");
}  

此处BLL.Admin.CreateTestCategory位于另一层,并且未实现IDisposable。它只是进行一些EF数据库调用,这些调用使用Repository模式以自己的方式处理,所以不用担心。但是在这个控制器中我创建了该类的对象obj。在解决之后,我想手动销毁/处置obj。所以我注释掉了这一行,这是处理obj的唯一方法吗?

我没有让BLL.Admin.CreateTestCategory实现IDisposable的原因是,可能有一百个类似它。我不想去每一个并实现IDisposable然后使用using块,它很痛苦,而我想在创建它之后手动处理它。我也不想等待GC。那么完美可靠的做法是什么?

1 个答案:

答案 0 :(得分:1)

这个问题已在问题本身的评论中以迂回的方式得到回答,但总结一下CodingYoshi,Evk和Fabjan在那里所说的......

vmax用于清理不由.NET运行时管理的资源。如果您需要清理与数据库,文件锁等的连接,那么您真的应该使用IDisposable。对于托管内存,垃圾收集器几乎可以在任何情况下更好地处理它。可以使用析构函数,但通常不需要。

参考文献: