我想知道在使用Web站点的上下文类连接到db时,性能和一般最佳实践的差异是什么.考虑这两种不同的方法时,最好的方法是什么:
public class Repository() { Private Context context; public ListGetUsers() { return this.context.Users.ToList(); }
要么
public class Repository() { public ListGetUsers() { using (Context context = new context()) { return context.Users.ToList(); } } }
如果它将结果作为a List
或as 返回是否重要IEnumerable
?
从MSDN复制
一生
上下文的生命周期在创建实例时开始,在实例处理或垃圾收集时结束.如果您希望将上下文控制的所有资源放置在块的末尾,请使用.使用时,编译器会自动创建try/finally块并在finally块中调用dispose.
using (var context = new ProductContext()) { // Perform data access using the context }
在决定上下文的生命周期时,以下是一些一般性指导原则:
使用长时间运行的上下文时,请考虑以下事项:当您将更多对象及其引用加载到内存中时,上下文的内存消耗可能会迅速增加.这可能会导致性能问题.请记住在不再需要时处理上下文.如果异常导致上下文处于不可恢复状态,则整个应用程序可能会终止.随着查询和更新数据的时间之间的差距的增大,遇到并发相关问题的可能性也会增加. 使用Web应用程序时,请为每个请求使用上下文实例. 使用Windows Presentation Foundation(WPF)或Windows窗体时,请为每个窗体使用上下文实例.这使您可以使用上下文提供的更改跟踪功能.