【翻译】提示18——如何决定ObjectContext的生命周期
作者:Alex D James
我们经常碰到一个问题是ObjectContext应对存活多久。经常被引用的选项包括:
- 函数(Function)
- 窗体(Form)
- 线程(Thread)
- 应用程序(Application)
很多人都在问这类型的问题,典型的例子是在Stackflow上的问题。我相信有更多的类似问题被埋没在我们的论坛上。
这是一个经典的取决于类型的问题。
做出决定有许多权衡因素,主要包括:
- 处置(Disposal):
干净处置ObjectContext和它的资源是很重要的。如果为每一个函数创建一个新的ObjectContext,这会容易很多,因为可以简单的使用using块来确保适当的释放资源。
using (MyContext ctx = new MyContext())
{
…
}
- 构建的花费(Cost Of Construction):
许多人比较关注重一次又一次的重新创建ObjectContext的花费,这完全可以理解。现实情况是这种成本其实很低,因为大部分时候,它只涉及到通过引用将元数据从全局缓存中复制到新的ObjectContext。基本上,我不认为这种成本是值得担心的,但一如既往,这规则存在例外情况。
- 内存使用(Memory Usage):
越多的使用一个ObjectContext,基本上它就会越占内存。这是因为,基本上无论是查询、添加或附加,它都要保存对所有实体的引用。因此,必须考虑无限期地共享相同的ObjectContext所存在的问题。尽管对于这种情况有一些例外和解决办法,但大部分时候,不建议这样做。
○ 如果ObjectContext只是执行NoTracking查询,那么它不会变大,因为它会立即忘记这些实体。
○可以实现一些非常明确的善后逻辑,即实现某种形式的循环接口,遍历ObjectStateManager中分离的实体和AcceptingChanges(..) 来放弃删除对象。注意:我不建议这样,我只是说,它应用有可能,因为我不知道相对于重新创建,它是否会导致保存。这也许是未来博客文章的一个好题材。
- 线程安全(Thread Safety):
如果尝试去重用一个ObjectContext,你应该知道,它不是线程安全的,这类似于标准的.NET集合类。如果你从许多线程(如web请求)中访问它,你就要确保手动进行同步访问。
- 无状态(Stateless):
如果你的服务被设计为无状态的,其实大多数Web服务应该是这样,在请求之间重用ObjectContext可能不是最好的,因为最后一次通话的ObjectContext的残余(leftovers)可能会产生微秒的影响,而这并不是应用程序所预期的。
- 自然有限的生命周期(Natural finite lifetimes):
如果你使用一个自然有限的生命周期的方式来管理ObjectContext,如一个短周期的窗体,一个UnitOfWork,或一个存储库,那么有作用范围的ObjectContext可能是最好的实现。
正如你所看到的,有许多因素在起作用。
他们中的大多数倾向于短生命周期的上下文,而不是共享的。
因此,这就是我推荐的法则。
然后,只有了解了这背后的“推理法则”,才有助于在适当的时候采用适合自己的方式。
【翻译】提示18——如何决定ObjectContext的生命周期的更多相关文章
- Maven的构建生命周期理解
以下引用官方的生命周期解释https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html: 一.构建生命 ...
- Maven构建生命周期
以下引用官方的生命周期解释https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html: 一.构建生命 ...
- Unity(二)生命周期LifetimeManager
描述:Unity的生命周期是注册的类型对象的生命周期,而Unity默认情况下会自动帮我们维护好这些对象的生命周期,我们也可以显示配置对象的生命周期,Unity将按照配置自动管理. //创建一个Unit ...
- [IoC容器Unity]第二回:Lifetime Managers生命周期
1.引言 Unity的生命周期是注册的类型对象的生命周期,而Unity默认情况下会自动帮我们维护好这些对象的生命周期,我们也可以显示配置对象的生命周期,Unity将按照配置自动管理,非常方便,下面就介 ...
- [转载][IoC容器Unity]第二回:Lifetime Managers生命周期
1.引言 Unity的生命周期是注册的类型对象的生命周期,而Unity默认情况下会自动帮我们维护好这些对象的生命周期,我们也可以显示配置对象的生命周期,Unity将按照配置自动管理,非常方便,下面就介 ...
- [翻译]AKKA笔记 - ACTOR生命周期 - 基本 -5
原文地址:http://rerun.me/2014/10/21/akka-notes-actor-lifecycle-basic/ (请注意这了讨论的生命周期并不包括 preRestart 或者pos ...
- [翻译] Autofac 控制范围和生命周期
原文链接:http://docs.autofac.org/en/latest/lifetime/index.html Lifetime 是指服务的实例在程序中存活多久 – 从最初的实例化到清理(dis ...
- (5/18)重学Standford_iOS7开发_视图控制器生命周期_课程笔记
第五课: 1.UITextView @property (nonatomic, readonly) NSTextStorage *textStorage;//注意为只读属性,因此不能直接更改内容,NS ...
- [翻译] 编写高性能 .NET 代码--第二章 GC -- 减少分配率, 最重要的规则,缩短对象的生命周期,减少对象层次的深度,减少对象之间的引用,避免钉住对象(Pinning)
减少分配率 这个几乎不用解释,减少了内存的使用量,自然就减少GC回收时的压力,同时降低了内存碎片与CPU的使用量.你可以用一些方法来达到这一目的,但它可能会与其它设计相冲突. 你需要在设计对象时仔细检 ...
随机推荐
- 建立自己的git服务器
需求情景 就像金山快盘同步盘那样, 在开发环境windows 10和部署环境Ubuntu server 14.04之间建立同步关系.比如windows端多了一个a.txt文件,你推送后,Ubuntu端 ...
- jboss规则引擎KIE Drools 6.3.0 Final 教程(1)
前言 目前世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程几乎没有,有的也只有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老版本的JBOSS Guvnor即5 ...
- android ActionBarActivity设置全屏无标题
新建的Activity继承自ActionBarActivity,设置全屏无标题本来很简单的事,但是没想到app竟然无缘无故的挂,要么就是白屏一片,要么就是黑屏.坑了我一个多小时!!! 原因是Actio ...
- The new powerful SQL executing schedule monthly or weekly in DB Query Analyzer 7.01
1 About DB Query Analyzer DB Query Analyzer is presented by Master Genfeng,Ma from Chinese Mainland. ...
- Unity UGUI图文混排(六) -- 超链接
图文混排更新到超链接这儿,好像也差不多了,不过就在最后一点,博主也表现得相当不专业,直接整合了山中双木林同学提供的超链接的解决方案,博主甚至没来得及细看就直接复制了,但感觉还是挺好用的. 博主已经将超 ...
- 使用Contacts Contract Content Provider操作通讯录最佳实践
Android向所有被赋予READ_CONTACTS权限的应用程序提供了联系人信息数据库的完全访问权限.Contacts Contract使用3层数据模型去存储数据,下面介绍Contacts Cont ...
- SceneKit做一个旋转的地球效果
SceneKit可以用寥寥几行帮你完成很多OpenGL复杂的3D设置代码,下面本猫就带大家完成一个旋转的3D地球的场景. 首先需要地球表面图片,将其导入到Xcode中: 我们用SceneKit内置的几 ...
- Erlang标准数据结构的选择
Erlang标准数据结构的选择(金庆的专栏)gen_server with a dict vs mnesia table vs etshttp://stackoverflow.com/question ...
- Android获取当前网络状态
Android获取当前网络状态 效果图 有网络 没有网络 源码 下载地址(Android Studio工程):http://download.csdn.net/detail/q4878802/9052 ...
- 剑指Offer——银行网申内容模版
剑指Offer--银行网申内容模版 年获得"优秀共青团员"称号 2013.12 科技标兵 2013.10 三好学生 2013.10 "三下乡"优秀学生 2013 ...