我有使用实体框架作为ORM的ASP.NET MVC应用程序。现在我正在为EF ObjectContext.使用PerWebRequest的生活方式
在分析高负载下的应用程序性能时,我发现了ObjectContext创建中的一个瓶颈。
我想把ObjectContext's的生活方式改为池,但是有一个问题。
在我的应用程序的遗留部分中,有服务定位器反模式。因此,ObjectContext可以在每个web请求中解析多次,并且在使用后不会显式地发布。
对于PerWebRequest,这不是一个问题,因为ObjectContext实例实例化一次,并在EndRequest事件上发布。
对于默认的池方式,每个解析方法调用都会返回不同的实例。但是我想在web请求范围内重新使用单个实例。另外,我希望实例在请求结束时自动释放(返回到池)(使用PerWebRequestLifestyleModule). )
在我看来,我应该为温莎实现自定义LifestyleManager或自定义IPool。但由于在温莎缺乏经验,我不知道如何将PerWebRequest和合并的和生活方式结合起来。
你能给我点主意吗?谢谢。
UPD:关于ObjectContext的状态和重用的原因
有表演的原因。创建ObjectContext非常昂贵。我在寻找避免它的方法。我有两种方法来处理ObjectContext的有状态性质和重用它:
发布于 2012-08-11 19:15:03
不要跨请求重用ObjectContext。您将泄漏请求之间的共享状态(以及用户之间的共享状态)。ObjectContext类不被设计为可重用。
在你的问题中,我没有找到不使用PerWebRequest的理由,所以就用它吧。
发布于 2012-08-11 18:39:49
在您的示例中,您可以改变与当前线程绑定的生活方式,确保web应用程序中的每个工作线程都获得一个实例。
https://stackoverflow.com/questions/11915145
复制相似问题