对于Intranet应用程序,我构建一个MVC5网站。我需要一个非常大的类对象,该对象中的模型中包含大量数据,并且出于安全原因,每次调用该方法(即
)时都必须构建该类帽子largeClass = new LargeClassObject(param1, param2);
在函数末尾,garbageCollector会处理该类。很好有时,也许当Intranet中断时,该方法可能无法正确结束并且类仍保留在内存中。 如何在下一个调用中检测到该类的先前副本是否存在?
答案 0 :(得分:1)
从IDisposable继承您的类:
public class LargeClassObject : IDisposable
{
var disposed = false;
var handle = new SafeFileHandle(IntPtr.Zero, true);
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposed)
return;
if (disposing) {
handle.Dispose();
}
disposed = true;
}
}
然后执行以下操作:
public void Main()
{
using(var largeClass = new LargeClassObject(param1, param2))
{
try
{
DoSomethingWithObject(largeClass);
}
catch(Exception ex)
{
//Do any additional cleanup
}
}
}
现在这是否适合您取决于您的特定要求,但是在执行过程中发生任何错误时,largeClass
将从内存中清除。