真的希望能够用某种属性来装饰我的类,该属性将强制使用 using 语句,以便始终安全地处理该类并避免内存泄漏。有人知道这种技术吗?
问问题
388 次
3 回答
13
好吧,有一种方法可以做到这一点 - 只允许通过接受委托的静态方法访问您的对象。作为一个非常简化的示例(显然有许多不同的打开文件的方式 - 读/写等):
public static void WorkWithFile(string filename, Action<FileStream> action)
{
using (FileStream stream = File.OpenRead(filename))
{
action(stream);
}
}
如果唯一能够创建一次性对象实例的东西是您自己的类中的方法,那么您可以确保它们得到适当的使用。诚然,没有什么可以阻止委托复制参考并在以后尝试使用它,但这不是完全相同的问题。
当然,这种技术严重限制了您可以对对象执行的操作 - 但在某些情况下它可能很有用。
于 2009-04-15T10:13:25.873 回答
0
如果要确保始终释放对象,请将终结器与 IDisposable 结合使用。
但在您这样做之前,请阅读 IDisposable 和终结器,并意识到您通常不需要它们,除非您的类正在执行诸如管理非托管资源的生命周期之类的事情。
使用终结器,您的对象将“最终”被回收,无论是否包含在 using 中。using 语句对 IDisposable 很方便,它允许进行确定性清理。唯一需要注意的是,带有终结器的对象清理起来成本更高,并且在等待终结时通常会在内存中停留更长时间。
ref我什么时候需要实现终结器或 IDisposable? 或 technorabble:使用 Dispose、Finalizers 和 IDisposable
于 2009-04-15T11:19:46.850 回答