有人可以向我解释我们如何以及为什么需要使用Dispose()?它是ASP.NET MVC 4附带的默认控制器模板的一部分。当对象(在这种情况下,数据库中的数据不再使用)中,.NET中的垃圾收集器是否应该自动启动?
从数据库加载时是否应该使用Dispose()而不是常规的对象分配?
答案 0 :(得分:2)
垃圾收集在任何托管内存资源上自动运行。但是,有时会有类使用非托管内存或特殊的非内存资源,例如需要释放的文件句柄。
实体框架上下文可以访问来自共享连接池的连接,并且需要告知他们何时可以放弃这些连接,因为它们不再被使用。
从数据库加载时是否应该使用Dispose()而不是常规的对象分配?
Dispose方法只能由可能使用非托管内存或非内存资源的类实现。如果某个类确实实现了IDisposable
接口,则在完成该对象时应始终在其上调用Dispose
。
答案 1 :(得分:2)
Dispose
(可以说是Disposable模式)。是的,.NET垃圾收集器将清理.NET托管对象,但数据库连接是不受.NET Framework管理的低级对象。与文件处理程序相同 - 在打开/写入文件时使用Dispose模式,因为实际的文件句柄不是由.NET管理的。
MSDN documentation描述了IDisposable
以及您实施它的原因。
EF使用它,因为DbContext
下面是DbDataConnection
,它可以使用非托管资源。在这些情况下,最好实施IDisposable
并相应地处理非托管资源的清理。