[英]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.