2012-12-13 146 views
3

我有一個LINQ查詢,其獲取從客戶表中的所有記錄如下可觀察集合:如何優化linq查詢的速度?

customerList = new ObservableCollection<customer>(dbContext.customers); 
dgRecords1.ItemsSource = customerList; 

列表綁定到數據網格。客戶表包含近百個領域。但是我只在數據網格上顯示幾個字段。我的問題是

是否僅從數據庫中使用linq查詢引入選定字段會提高客戶屏幕的速度?

我需要篩選並有時從此列表中刪除記錄。

哪個是最好的方法來選擇幾個字段到可觀察的收藏,有人可以給一些示例linq查詢?

+3

顯然,限制結果集中的列數會減少需要傳輸的數據量。 – Jodrell

+1

你可以嘗試的另一件事是分頁。或預取... – dutzu

回答

6

提示來優化速度:

  • 減少列降低帶寬要求
  • 通過(通常)
  • 關閉減少的行,但引入的尋呼,減少的帶寬更改跟蹤和身份管理(例如LINQ-to-SQL中的ObjectTrackingEnabled)將減少後處理數據的開銷
  • 使用預編譯查詢可以在某個時間•幫助降低預處理開銷

...但坦率地說,當我們有這個問題,我們解決了它「一勞永逸」寫「短小精悍」,並去老派:

var list = connection.Query<CustomerViewModel>(
    "select {some specific cols} from Customers").ToList(); 

其中CustomerViewModel是不相關的LINQ等簡單的POCO類型,僅僅具有所需的值,例如:

class CustomerViewModel { 
    public int Id {get;set;} 
    public string Name {get;set;} 
    // ... 
} 

這削減了所有不必要的開銷,是當你只是想顯示數據的理想選擇;此外,參數化和具體化層非常優化(策略緩存,以獲得最佳性能)。

4

如果您只選擇了所需的列而不是所有列,那麼您的性能會有所提高。您可以使用StopWatch實際計算差異。只從數據庫中選擇所需的列總是最好的,而不是全部。

你還可以考慮使用SkipTake來實現分頁。你可以看到:LINQ TO SQL GridView (Enhanced Gridview)