【问题标题】:Enhancing performance on a DAL when it is implemented using Entity Framework使用实体框架实现 DAL 时提高其性能
【发布时间】:2010-12-29 11:06:09
【问题描述】:
我正在使用实体框架实现 DAL。我们有一些 DAL 类(我称它们为存储库)在每次调用方法时通过参数实例化或接收上下文。我不喜欢这种行为;我没有记录这个问题,但我的常识告诉我上下文的实例化消耗了太多的系统资源。所以:
- 上下文的实例化成本高吗?
- 如果您对 1 的回答为“是”,您将如何从设计角度解决此问题?
- 如果您对 1 的回答是“是”,您将如何在 C# 中实现该解决方案?
- 您建议采用哪种方法为 Web 应用程序实施 DAL?
【问题讨论】:
标签:
c#
.net
design-patterns
entity-framework-4
.net-4.0
【解决方案2】:
上下文生命周期管理在使用 ORM 时至关重要。实体框架上下文保存有关已加载实体的信息以用于延迟加载和更改跟踪目的,并且其内存占用可能会增长得非常快。如果你不处理你的上下文,你基本上会有内存泄漏。
但是,您是正确的,将上下文生命周期保持得太短并不理想,因为您可能希望使用更改跟踪。
using (var context = new DataContext())
{
context.Products.Add(product);
context.SaveChanges();
}
上面的示例显示了太快地处理上下文而无法利用更改跟踪的好处。
对于 Web 应用程序,您应该使用每个请求的上下文。
对于 Win Form 应用程序,您可以在从一个表单移动到另一个表单时处理上下文。