C# 在LINQ to SQL中禁用对象跟踪对我有帮助吗?以及其他速度改进

C# 在LINQ to SQL中禁用对象跟踪对我有帮助吗?以及其他速度改进,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我知道测试起来似乎微不足道,但目前我无法访问我的代码来尝试这个,另外,如果有人有其他建议,我想听听 我有一个LINQ到SQL查询,它定期返回100000条记录——大部分时间检索这些记录需要20秒,这是不可接受的。我检索到的数据只会被读取,而不会被更新或插入。我已经阅读了DataContext上的“ObjectTrackingEnabled”属性,以及它如何帮助加快查询速度——这是否适用于我的情况?我想跟踪所有100000个物体是很费劲的 我是否可以尝试其他常规的LINQ到SQL改进 非常感谢 编

我知道测试起来似乎微不足道,但目前我无法访问我的代码来尝试这个,另外,如果有人有其他建议,我想听听

我有一个LINQ到SQL查询,它定期返回100000条记录——大部分时间检索这些记录需要20秒,这是不可接受的。我检索到的数据只会被读取,而不会被更新或插入。我已经阅读了DataContext上的“ObjectTrackingEnabled”属性,以及它如何帮助加快查询速度——这是否适用于我的情况?我想跟踪所有100000个物体是很费劲的

我是否可以尝试其他常规的LINQ到SQL改进

非常感谢


编辑:可能值得注意-我的查询上有一个“select new”(选择新建),但它确实会从联接中的另一个表返回整行。不幸的是,如果不尝试,很难知道哪些确切的技巧会起作用。我会说“当然,试着关闭LINQtoSQL中的所有功能”-只有您可以测量这对系统的影响

但是,;我们在LINQtoSQL中的物化性能也有一些问题,因此对于许多性能关键的“读取”查询,我们编写并切换到了。这是一个非常简单但非常优化的API,用于执行对对象模型的查询。它不直接涉及LINQ到SQL,所以像延迟加载这样的事情不会起作用,但它确实非常快

一般用法类似于LINQ to sql的
ExecuteQuery(sql,args)
功能,除了使用命名参数TSQL语法而不是
{0}
/
{1}
字符串

// insanely simple example purely for illustration
int custId = ...
var orders = conn.Query<Order>(
       "select * from Order where CustomerId = @custId",
       new { custId });
//非常简单的例子纯粹是为了说明
int custId=。。。
var订单=连接查询(
“从CustomerId=@custId的订单中选择*”,
新的{custId});
如果当前正在使用LINQ查询,可以通过多种方式提取TSQL:

  • SQL跟踪
  • dbContext.Log
    -可能(在开发框上)连接到
    控制台.Out
  • 使用,它可以有效地捕获SQL操作,即使是在生产设备上

我们将这种方法非常成功地用于我们先前存在的LINQ-to-SQL类型。

不幸的是,如果不尝试,很难知道哪些确切的技巧会起作用。我会说“当然,试着关闭LINQtoSQL中的所有功能”-只有您可以测量这对系统的影响

但是,;我们在LINQtoSQL中的物化性能也有一些问题,因此对于许多性能关键的“读取”查询,我们编写并切换到了。这是一个非常简单但非常优化的API,用于执行对对象模型的查询。它不直接涉及LINQ到SQL,所以像延迟加载这样的事情不会起作用,但它确实非常快

一般用法类似于LINQ to sql的
ExecuteQuery(sql,args)
功能,除了使用命名参数TSQL语法而不是
{0}
/
{1}
字符串

// insanely simple example purely for illustration
int custId = ...
var orders = conn.Query<Order>(
       "select * from Order where CustomerId = @custId",
       new { custId });
//非常简单的例子纯粹是为了说明
int custId=。。。
var订单=连接查询(
“从CustomerId=@custId的订单中选择*”,
新的{custId});
如果当前正在使用LINQ查询,可以通过多种方式提取TSQL:

  • SQL跟踪
  • dbContext.Log
    -可能(在开发框上)连接到
    控制台.Out
  • 使用,它可以有效地捕获SQL操作,即使是在生产设备上

我们非常成功地将这种方法用于我们先前存在的LINQ to SQL类型。

如何使用SqlDataAdapter/SqlDataReader检索这些记录?(我的意思是-除了不使用Linq to SQL之外,在C#级别可以期望有什么改进,以及在SQL Server级别可以做些什么来加快查询速度)?抱歉,忘了提及这一点。它似乎相对更快-只有几秒钟,这将是理想的。我花了一些时间优化查询以获得最佳SQL。您正在运行的查询是否返回属于数据模型一部分的对象?如果您要返回某种视图对象,这会有所帮助(因为它不会被跟踪),那么如何使用SqlDataAdapter/SqlDataReader检索这些记录呢?(我的意思是-除了不使用Linq to SQL之外,在C#级别可以期望有什么改进,以及在SQL Server级别可以做些什么来加快查询速度)?抱歉,忘了提及这一点。它似乎相对更快-只有几秒钟,这将是理想的。我花了一些时间优化查询以获得最佳SQL。您正在运行的查询是否返回属于数据模型一部分的对象?如果您要返回某种视图对象,这会有所帮助(因为它不会被跟踪)。