我有一个LINQ查询从基于一个ID列(其中id = @ ID)LINQ VS SQL(或.NET应用程式与SQL Server Management Studio中)
此查询需要4秒视图中检索行跑。我已经使用SQL Server Profiler来检查由linq执行的查询,并且如果我将该查询直接复制到management studio并执行,查询只需要56ms。
这个指数时间增加在我的应用程序中的所有linq查询中都是一致的。当(WPF)应用程序中执行< 100ms时,可能会导致执行时间延长?
== ==编辑
我已经成功地进一步孤立,言论表明探查持续时间;
/* 3953ms, 111487 reads */
context.SkuView.Where(p => p.TermId == 35 && !p.IsDeleted).ToList();
/* 90ms, 173 reads */
context.SkuView.Where(p => p.TermId == 35).ToList();
如果我把(sql呈现的)linq查询直接粘贴到我得到的ssms中;
/* 250ms, 173 reads */
SELECT * FROM SkuView WHERE TermId == 35 AND IsDeleted = 0
/* 250ms, 173 reads */
SELECT * FROM SkuView WHERE TermId == 35
所以,问题有事情做与读取使用p.IsDeleted时通过LINQ算...
哇,这是一个巨大的时间差。要清楚,运行4秒是根据SQL事件探查器执行查询所花费的时间? – Pandincus 2010-12-09 01:05:48
正确。 linq使用exec sp_executesql执行查询,Profiler显示4秒的运行时间。如果我复制刚才运行的确切的exec _sp_executesql,并在SSMS中执行它,profiler显示58ms – 2010-12-09 01:12:57
L2S不是查询数据库的最有效的方式,但这是一个非常大的差异。 – Phill 2010-12-09 01:17:19