首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将集合生活方式与温莎的PerWebRequest生活方式结合起来

将集合生活方式与温莎的PerWebRequest生活方式结合起来
EN

Stack Overflow用户
提问于 2012-08-11 13:33:48
回答 2查看 345关注 0票数 2

我有使用实体框架作为ORM的ASP.NET MVC应用程序。现在我正在为EF ObjectContext.使用PerWebRequest的生活方式

在分析高负载下的应用程序性能时,我发现了ObjectContext创建中的一个瓶颈。

我想把ObjectContext's的生活方式改为,但是有一个问题。

在我的应用程序的遗留部分中,有服务定位器反模式。因此,ObjectContext可以在每个web请求中解析多次,并且在使用后不会显式地发布。

对于PerWebRequest,这不是一个问题,因为ObjectContext实例实例化一次,并在EndRequest事件上发布。

对于默认的方式,每个解析方法调用都会返回不同的实例。但是我想在web请求范围内重新使用单个实例。另外,我希望实例在请求结束时自动释放(返回到池)(使用PerWebRequestLifestyleModule). )

在我看来,我应该为温莎实现自定义LifestyleManager或自定义IPool。但由于在温莎缺乏经验,我不知道如何将PerWebRequest和合并的和生活方式结合起来。

你能给我点主意吗?谢谢。

UPD:关于ObjectContext的状态和重用的原因

有表演的原因。创建ObjectContext非常昂贵。我在寻找避免它的方法。我有两种方法来处理ObjectContext的有状态性质和重用它:

  • 对查询使用无状态上下文(关闭ChangeTracking )。对于命令,请使用另一个实例。
  • 在返回池时重置上下文的状态。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-11 19:15:03

不要跨请求重用ObjectContext。您将泄漏请求之间的共享状态(以及用户之间的共享状态)。ObjectContext类不被设计为可重用。

在你的问题中,我没有找到不使用PerWebRequest的理由,所以就用它吧。

票数 3
EN

Stack Overflow用户

发布于 2012-08-11 18:39:49

在您的示例中,您可以改变与当前线程绑定的生活方式,确保web应用程序中的每个工作线程都获得一个实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11915145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档