如何检测 Linq to SQL 中的 Select n+1 问题?
Posted
技术标签:
【中文标题】如何检测 Linq to SQL 中的 Select n+1 问题?【英文标题】:How to Detect Select n+1 problems in Linq to SQL? 【发布时间】:2009-11-20 15:29:30 【问题描述】:如果我使用 linq to SQL,检测 Select n+1 问题的最佳方法是什么,现在我们正在处理一个项目,显示一些列表似乎很慢。 检测此问题的最佳方法是什么?
【问题讨论】:
【参考方案1】:也许这会有所帮助:
http://ayende.com/Blog/archive/2009/11/13/linq-to-sql-profiler-is-now-on-public-beta.aspx http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx http://visualstudiogallery.msdn.microsoft.com/ru-ru/d5a64d5a-174a-4357-ad84-dbeeec030f23
或者您可以使用 SQL Profiler 并检查在您访问单个列表项时是否执行了查询。
【讨论】:
【参考方案2】:这不会直接检测到 n+1 个问题,但是当您查看生成的 SQL 时,它们很容易发现。
DataContext.Log 属性采用 TextWriter,它将输出生成的 SQL 和一些其他诊断信息。这是一个记录到输出的实现。 Linq to SQL DebuggerWriter。下面是如何使用 DebuggerWriter 的简单示例。
DataContext db = new DataContext();
#if DEBUG
db.Log = new DebuggerWriter();
#endif
【讨论】:
以上是关于如何检测 Linq to SQL 中的 Select n+1 问题?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Predicate<T> 传递给 Linq to SQL 中的 Where() 方法?