如何释放具有未实现 IDisposable 的属性的类
本文关键字:实现 IDisposable 属性 何释放 释放 | 更新日期: 2023-09-27 18:28:50
不确定如何处置这个类,因为我需要释放资源,因为应用程序中的内存泄漏导致它变慢。我不确定如何处置下面的类,因为某些属性没有实现 IDisposable。我对 c# 相当陌生,所以尽量不要使响应过于复杂。
public class CellItem: IDisposable
{
private Timer foo = new Timer();
public int MedicationDispenseId { get; set; }
public Enumerations.Timeslot Timeslot { get; set; }
public DateTime DateAdministered { get; set; }
protected override void Dispose(bool disposing)
{
disposing = true;
Dispose(disposing);
}
}
代码中有一个错误:
protected override void Dispose(bool disposing)
{
disposing = true;
Dispose(disposing);
}
是递归的,如果只是在堆栈空间不足之前坐在那里片刻。
要回答你的问题:如果这是你的代码,那么只需更改Dispose
方法即可释放适当的资源。如果不是,那么您必须询问编写它的人来修复它或考虑编写自己的(无错误(版本。
protected override void Dispose(bool disposing)
您没有实现 IDisposable.Dispose(( 方法,因此此代码无法编译。 受保护的 Dispose(bool( 方法是一次性模式的伪影。 仅当类具有终结器或类派生自实现一次性模式的基类时,才使用它。 事实并非如此。
所以保持简单,只实现Dispose((:
public void Dispose()
{
foo.Dispose();
}
尝试阅读以下资源以帮助您入门:
可识别
http://msdn.microsoft.com/en-us/library/system.idisposable.aspx
使用关键字
http://msdn.microsoft.com/en-us/library/yh598w02.aspx
Disposing
标志不是指示类的处置是否已开始的字段,而是应被视为一个虚拟参数,当从实现接口的无参数Dispose
方法调用protected virtual
方法时,值true
传递到该参数。 该参数最初设计为允许派生类使用通用的"补丁点",这些派生类希望向Dispose
和Finalize
(析构函数(方法添加功能,但实际上,派生类或未密封类几乎从不适合实现Finalize
代码,除非该类直接派生自Object
或来自其全部目的都以此类清理为中心的类。
请注意,与大多数接口不同,IDisposable
"契约"不会对实现它的类施加任何义务,而是作为一种标准手段存在,通过这种方式,许多类型的类可以对请求其构造的代码施加某些可转移的契约义务。 典型的IDisposable
对象将要求其他实体代表其执行某些操作,直到另行通知,将承诺当不再需要其服务时将通知其他实体,并将使用其Dispose
方法来发出此类通知。 许多实现IDisposable
的类的构造函数协定将要求调用者确保在放弃对象之前,它要么Dispose
它,要么将其提供给承诺这样做的其他实体。