我昨天发布了,因为我怀疑我写的LINQ-to-SQL查询非常缓慢。我正在做的是迭代我的查询结果,并从中构建一个DataTable。然后我将DataTable绑定到表单上的DataGridView。
我认为查询是缓慢的部分,但我反驳了这一点 - 查询,以及DataTable构造,最多需要一两秒,但是当我在DataGridView上设置DataSource属性时,应用程序似乎在显示网格之前挂起大约10秒钟。
我尝试使用反射在DGV上设置DoubleBuffered属性,但遗憾的是它没有任何不同。还有其他人遇到过这样的问题吗?
编辑:注意,如果网格有少量行(即30-40),它就可以了。一旦行数达到数百,它就会停止
答案 0 :(得分:0)
跟踪生成的SQL。很可能确实是延迟加载导致每行有一个或多个额外的sql语句(这与你描述的行为一致)。
您可以从datacontext中记录SQL,也可以使用sql server profiler查看正在生成的sql。
如果确实是延迟加载,则可以使用datacontext的DataLoadOptions来覆盖默认的延迟加载行为。 示例(这将加载每个客户的所有订单)
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Customer>(Customer => Customer.Orders);
db.LoadOptions = options;
因此,在这种情况下,您将看到Linq2sql生成的连接
v更多信息:http://msdn.microsoft.com/en-us/library/system.data.linq.dataloadoptions.aspx