我有使用Entity Framework作为ORM的ASP.NET MVC应用程序。 现在我对EF ObjectContext 使用 PerWebRequest 生活方式。
在高负载下分析应用程序性能时,我发现ObjectContext创建存在瓶颈。
我想将 ObjectContext 的生活方式改为合并,但是存在问题。
在我的应用程序的遗留部分中,有服务定位器反模式。因此,每个Web请求可以多次解析ObjectContext,并且在使用后不会显式释放。
使用 PerWebRequest ,这不是问题,因为 ObjectContext 实例已实例化一次并在 EndRequest 事件中保证发布。
使用默认的合并生活方式,每个 Resolve 方法调用都会返回不同的 ObjectContext 实例。但我想在Web请求范围中重新使用单个实例。 此外,我希望实例在请求结束时自动释放(返回池)(使用 PerWebRequestLifestyleModule )。
在我看来,我应该为Windsor实施自定义 LifestyleManager 或自定义 IPool 。 但由于缺乏温莎的经验,我不知道如何结合汇集和 PerWebRequest 生活方式。
你能给我任何想法吗? 感谢。UPD:关于ObjectContext的状态和重用原因
有表现理由。创建ObjectContext非常昂贵。我正在寻找避免它的方法。 我有两种方法来处理ObjectContext的有状态性并重用它:
答案 0 :(得分:3)
请勿跨请求重复使用ObjectContext
。您将泄漏请求之间(以及可能在用户之间)的共享状态。 ObjectContext
类不能重复使用。
在你的问题中,我没有找到不使用PerWebRequest
的理由,所以只需使用它。
答案 1 :(得分:0)
在您的情况下,您可以将生活方式更改为绑定到当前线程,确保Web应用程序中的每个工作线程都获得实例