[英]How does Dispose work with Entity Framework
有人可以向我解释为什么以及为什么需要使用Dispose()吗? 它是ASP.NET MVC 4附带的默认控制器模板的一部分。当对象(在这种情况下,不再使用数据库中的数据)使用.NET时,是否应该自动启动.NET中的垃圾收集器?
从数据库加载而不是常规对象分配时应使用Dispose()是否正确?
垃圾回收会在任何托管内存资源上自动运行。 但是,有时有些类使用非托管内存或特殊的非内存资源(例如文件句柄)需要释放。
实体框架上下文可以从共享连接池访问连接,并且需要告知它们何时可以放弃这些连接,因为它们将不再使用。
从数据库加载而不是常规对象分配时应使用Dispose()是否正确?
Dispose方法只能由可能使用非托管内存或非内存资源的类实现。 如果某个类确实实现了IDisposable
接口,则在完成该对象后,应始终对其调用Dispose
。
Dispose
非托管资源时使用Dispose
(可以说是Disposable模式)。 是的,.NET垃圾收集器将清除.NET托管对象,但是数据库连接是不由.NET Framework管理的较低级别的对象。 与文件处理程序相同-在打开/写入文件时使用Dispose模式,因为实际的文件句柄不由.NET管理。
MSDN文档描述了IDisposable
以及实现它的原因。
EF之所以使用它,是因为DbContext
下面是一个DbDataConnection
,它可以与非托管资源一起使用。 在这些情况下,最好实现IDisposable
并相应地处理非托管资源的清理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.