2

Can someone explain to me how and why do we need to use Dispose()? It's part of the default controller template that comes with ASP.NET MVC 4. Shouldn't the garbage collector in .NET automatically kick in when the object, in this case data from a database is no longer in use?

Is it correct that Dispose() should be used when loading from a database but not regular object assignments?

4

2 回答 2

2

垃圾收集在任何托管内存资源上自动工作。但是,有时有些类使用非托管内存或需要释放的文件句柄等特殊非内存资源。

实体框架上下文可以访问来自共享连接池的连接,并且需要告知它们何时可以放弃这些连接,因为它们将不再被使用。

从数据库加载而不是常规对象分配时应该使用 Dispose() 是否正确?

Dispose 方法只能由可能使用非托管内存或非内存资源的类实现。如果一个类确实实现了该接口,那么当您完成该对象时IDisposable,您应该始终调用它。Dispose

于 2012-10-17T03:10:21.557 回答
2

Dispose在处理非托管资源时使用(可以说是 Disposable 模式)。是的,.NET 垃圾收集器将清理 .NET 托管对象,但数据库连接是不由 .NET Framework 管理的较低级别的对象。文件处理程序也是如此——当您打开/写入文件时使用 Dispose 模式,因为实际的文件句柄不是由 .NET 管理的。

MSDN 文档描述了IDisposable你为什么要实现它。

EF 使用它是因为它下面DbContext是一个DbDataConnection,它适用于非托管资源。在这些情况下,最好相应地实施IDisposable和处理非托管资源的清理。

于 2012-10-17T03:10:48.087 回答