这真是令人沮丧: 我之前在参考实体框架时发布了这个问题 Using IDisposable in EF现在这个错误消失了,但我无法理解这一点:
protected void Page_Init(object sender, EventArgs e)
{
try
{
String testCondition = Request.QueryString["Type"];
switch (testCondition)
{
case "A":
using (var rpt = new Report())
{
List<Class> lst= new ActionDBOClass.ActionMethod();
// other code for crstal report view
//setting datasource of the same report
}
break;
}
}
}
但是后来我也警告我必须在ActionMethod上实现dispose(实际上我在同一个类中完成了Idisposable实现,如:
public class ActionDBOClass:IDisposable
{
private bool _disposed = true;
public void Dispose()
{
Dispose(_disposed);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
context.Dispose();
// Dispose other managed resources.
}
//release unmanaged resources.
}
_disposed = true;
}
我还需要做什么? 我有类似的开关盒,这是我展示的第一个。
答案 0 :(得分:0)
如果不在Page_Init方法之外使用lst,请在返回之前调用lst.Dispose()。类似的东西:
case "A":
using (var rpt = new Report())
{
List<Class> lst= new ActionDBOClass.ActionMethod();
// other code for crstal report view
//setting datasource of the same report
lst.Dispose();
}
break;
更安全的方法是执行类似的操作(List lst = new ActionDBOClass.ActionMethod()){...因为这将确保在抛出异常时调用Dispose,或者在try块之外声明lst如果lst!= null,则调用finally块中的Dispose。