C# 更好的方法是:重用System.Data.Linq.DataContext上下文还是尽快处理它?

C# 更好的方法是:重用System.Data.Linq.DataContext上下文还是尽快处理它?,c#,sql-server,linq-to-sql,C#,Sql Server,Linq To Sql,如果我使用的是SqlConnection,显然最好的做法是尽快处理它,让连接池处理细节。使用System.Data.Linq.DataContext时是否应该遵循相同的模式 我应该创建一次上下文并将其传递给我的方法,还是应该从配置文件中获取连接字符串并多次创建上下文并在传递参数时保存 编辑:一个关于身份映射的有用链接:您应该只保留执行操作所需的数据上下文 这是因为它使用了一种称为身份映射的东西,所以每次您选择(比如说客户1)时,您都会得到相同的对象。这意味着它持有大量引用,并且随着时间的推移将消

如果我使用的是SqlConnection,显然最好的做法是尽快处理它,让连接池处理细节。使用System.Data.Linq.DataContext时是否应该遵循相同的模式

我应该创建一次上下文并将其传递给我的方法,还是应该从配置文件中获取连接字符串并多次创建上下文并在传递参数时保存


编辑:一个关于身份映射的有用链接:

您应该只保留执行操作所需的数据上下文

这是因为它使用了一种称为身份映射的东西,所以每次您选择(比如说客户1)时,您都会得到相同的对象。这意味着它持有大量引用,并且随着时间的推移将消耗越来越多的内存,这些结果将变得越来越陈旧


对于web应用程序,通常每个请求创建一个应用程序,并且DataContext类经过优化,可以快速创建。

+1需要注意的是,“操作”的定义(不幸的是,但必要的是)基本上由开发人员决定;出于实际目的,“操作”在像WiFrFor或WPF这样的富客户端的情况下,可能需要一些时间,并且需要显著的用户交互。我个人不会让用户交互延迟在数据上下文的生命周期中涉及,但是这样的路由确实涉及大量额外的工作。如果用户处于编辑记录的中间,我不确定这样做的好处是明确的;即使要具体化不同的上下文以进行检索和保存操作,也必须处理过时的数据。直到现在,你基本上已经失去了上下文提供给你的跟踪,除非你转向像STE这样的东西,它有它自己的头痛,而且几乎没有那么健壮。