4

我最近继承了一个使用 Linq2SQL 的 ASP.Net 应用程序。目前,它在每个页面中都将其 DataContext 对象声明为静态,并且在我第一次发现它们为空(单例)时创建它们。

如果这是好的或坏的,我需要评论。在我只需要从数据库中读取的情况下以及在我需要写入的情况下。

整个应用程序只有一个 DataContext 实例怎么样?

4

2 回答 2

6

恐怕每个应用程序一个 DataContext 的性能会很差。DataContext 对于初学者来说不是线程安全的,因此即使将其用作页面的静态成员也是一个坏主意。正如 asgerhallas 所提到的,将上下文用于工作单元是理想的 - 通常是单个请求。其他任何事情,您都会开始发现所有数据都在内存中,并且如果没有显式刷新,您将看不到更新。这里有几篇讨论这两个主题的帖子:身份映射工作单元

于 2009-04-24T18:27:08.777 回答
4

我曾经每个请求都有一个 DataContext ,但这取决于您面临的场景。我认为 L2S 的重点是将它与工作单元模式一起使用,在这种模式下,每个......以及工作单元都有一个上下文。但它在大型应用程序中效果不佳,因为以后很难将实体重新附加到新上下文。

Rick Strahl 在这里对该主题进行了很好的介绍:

http://www.west-wind.com/weblog/posts/246222.aspx

我可以说我过去遇到过问题的一件事是,有一个上下文来读取和写入场景。当您只是阅读时,在数据上下文中完成的更改跟踪是相当大的开销,这是大多数 web 应用程序大部分时间都倾向于做的事情。您可以将 datacontext 设为只读,它会大大加快速度 - 但随后您将需要另一个上下文来编写。

于 2009-04-24T17:58:57.193 回答