22
|
hIpPy · 技术社区 · 15 年前 |
![]() |
1
11
与其他内容相比,数据上下文的创建成本可能很高。但是,如果你完成了它,并希望尽快关闭连接,这将做到这一点,从上下文中释放任何缓存的结果。记住,不管是什么,你都在创建它,在这种情况下,你只是让垃圾收集器知道还有更多的免费东西要处理。 DataContext被设计成一个短期使用的对象,使用它,完成工作单元,退出……这正是您使用它所做的。 所以优点是:
缺点-更多代码?但那不应该是威慑,你用的是
如果您需要使用
|
![]() |
2
5
嗯,这是一个
|
![]() |
3
5
更不用说,在每个数据上下文后面都是您从DB请求的所有对象的标识图(您不想一直这样)。 DataContext的整个概念是 工作单位 具有 开放式并发 . 将其用于短交易(仅一个提交)和处置。 避免忘记释放的最佳方法是使用()。 |
![]() |
4
3
我取决于您的数据层的复杂性。如果每个调用都是一个简单的查询,那么每个调用都可以像在您的问题中那样包装在使用中,这样就可以了。 另一方面,如果您的数据层可以期望业务层发出多个连续调用,那么您最终将为每个较大的调用序列重复创建/处理数据上下文。不理想。 我所做的是将数据层对象创建为IDisposable。创建后,将创建DataContext(或在对方法进行第一次调用后创建),当数据层对象释放时,将关闭并释放DataContext。 它看起来是这样的:
|
![]() |
5
1
在一个特定的应用程序中,我体验到,在不包装
在这个示例中,我无法释放DataContext,因为
所有的
对于我来说,丑陋的Kluge是在foreach循环之后移除q对象的所有实体引用。更好的方法当然是使用
就我的经验而言,我会说使用
|
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Pavel Foltyn · 如何在C中生成逆字典# 6 月前 |
![]() |
ewok · 基于种子和上一个值创建值列表 10 月前 |
|
Vasu V · 将foreach转换为select语句 11 月前 |
![]() |
Amber Cahill · LINQ Any()会在没有参数的情况下枚举吗? 11 月前 |
![]() |
Modest · 使用命名空间和文本值序列化xElement 1 年前 |