2011-09-07 78 views
0

我昨天發佈了,因爲我懷疑我寫的LINQ-to-SQL查詢很慢。我正在做的是迭代我的查詢結果,並從中構建一個DataTable。然後將DataTable綁定到我的表單上的DataGridView。DataGridView緩慢重繪

我認爲查詢是緩慢的部分,但我反駁了這個 - 查詢和DataTable構造,最多花費一兩秒鐘,但是當我在DataGridView上設置DataSource屬性時,該應用程序似乎在顯示網格之前掛起約10秒鐘。

我已經嘗試使用反射設置DGV上的DoubleBuffered屬性,但它可悲地使沒有不同。有沒有人遇到過這樣的問題?

編輯:請注意,如果網格有少量的行(即30-40),它的工作原理。只要行數達到數百個,就立即停止。

+3

有可能是一些有用的東西在這個MSDN條目(在Windows窗體DataGridView控制性能調整):http://msdn.microsoft.com/en-us/library/ms171621.aspx –

+1

我曾經有一個非常緩慢的DataGridView linq-to-sql在背景,因爲在數據綁定期間觸發了延遲加載的引用。如果您確定沒有這樣的事情發生,那麼我建議您手工生成相同大小的數據表,並查看是否仍然存在問題 - 如果問題仍然存在,那麼您的可能需要實現虛擬模式。 –

+0

@David Hall:很可能是延遲加載,可以使用datacontext上的dataloadoptions來解決。另請參閱我的答案 – Pleun

回答

0

跟蹤生成的SQL。最可能的確是延遲加載,導致每行有一個或多個額外的sql語句(這與您描述的行爲一致)。

您可以從datacontext記錄SQL,也可以使用sql server分析器查看正在生成的sql。

如果確實是延遲加載,則可以使用datacontext的DataLoadOptions來覆蓋默認的延遲加載行爲。 例子(這將加載所有的訂單爲每一個客戶)

DataLoadOptions options = new DataLoadOptions(); 
options.LoadWith<Customer>(Customer => Customer.Orders); 
db.LoadOptions = options; 

因此,在這種情況下,你會看到一個聯接由LINQ2SQL

vMore信息生成:http://msdn.microsoft.com/en-us/library/system.data.linq.dataloadoptions.aspx