在使用 EFProfiler(BTW 绝对棒的工具!)分析我们的一些实体框架应用程序之后,似乎在大多数情况下,所有对象上下文都没有关闭。
例如,在本地运行后,EF Profiler 告诉我打开了326 个Object Context,但只关闭了 1 个?
所以我的问题是,我应该担心这个吗?还是它在实体框架中自成一体?
在使用 EFProfiler(BTW 绝对棒的工具!)分析我们的一些实体框架应用程序之后,似乎在大多数情况下,所有对象上下文都没有关闭。
例如,在本地运行后,EF Profiler 告诉我打开了326 个Object Context,但只关闭了 1 个?
所以我的问题是,我应该担心这个吗?还是它在实体框架中自成一体?
如果您不使用 IoC 容器,是否可以在每次请求后手动关闭 ObjectContexts,例如在 Global.asax 的结束请求中,从而为您的上下文模拟“每个请求”的生活方式?
如果您的应用程序没有明确地持有 ObjectContexts,最终将被释放,但一般来说,您应该在完成它们后尽快确定性地释放它们。在大多数情况下,它们将保持数据库连接,直到它们被释放。在我当前的 Web 应用程序中,我们使用 IoC 容器(Autofac)来确保在请求期间打开的任何 ObjectContext 在请求结束时被释放,并且不必等待垃圾收集。
我建议你担心它并尝试解决这个问题,因为对象上下文非常“庞大”。如果您的应用程序太多,您的应用程序最终可能会使用比所需更多的内存,并且 IIS 将更频繁地重新启动您的应用程序......