簡體   English   中英

Linq集團按業績表現

[英]Linq group by property performance

在一個參數化的查詢的靈感來自這篇文章LINQ group by property作為參數我已經獲得了一個很好的可參數化查詢,但是在性能上有一個缺點。

 public static void GetExpensesBy<TKey>( Func<Obj, TKey> myGroupingProperty)
    {
        var query = (from item in dataset
                     orderby item.ExpenseTime descending
                     select item).GroupBy(myGroupingProperty);
        // ....
    }
    // ..
    GetExpensesBy(p=> p.Column)

比直接查詢慢得多

 var query = (from item in expense
                     orderby item.ExpenseTime descending
                     select item).GroupBy(p => p.Column);

在13000行的表中,差異大約是2s vs 0.1s。

您是否知道如何改進第一種語法以提高性能?

更改Expression參數類型:

public static void GetExpensesBy<TKey>( Expression<Func<Obj, TKey>> myGroupingProperty)
{
 //...
}

傳遞一個Func<T>你正在從IEnumerable<T>調用GroupBy

在不知道什么是dataset情況下很難確定,但如果它是IQueryable ,那么兩者之間的一個區別是你的第一個查詢(因為它需要一個Func參數)是使用IEnumerable擴展並在內存中進行分組。 第二個示例是將lambda編譯為Expression ,從而將分組表達式添加到基本查詢中,如果可能,將其傳遞給提供程序。

因此,差異可能是第二個查詢在數據源中進行分組,而第一個查詢是在內存中提取所有數據和分組。

只需將參數從Func<Obj, TKey>更改為Expression<Func<Obj, TKey>> ,看看是否有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM