1
我有以下代碼使用Linq。如何提高我的linq查詢的性能?
return (from item in this
where item.IsMatch(orgid, postcode, shipmentMethod, providerCode)
orderby item.OrderID
select item.DTime).FirstOrDefault();
對於2百萬條記錄,它需要超過10分鐘才能返回一個值。 有人可以幫助我如何將此查詢轉換爲一個使用ParallelEnumerable
?
任何其他建議如何優化perfrormance歡迎..
***以上樣品是指從IEnumerable
繼承我的自定義類。該IsMatch()
方法具有一些內部條件:
public bool IsMatch(long orgid, string postcode, string shipmentMethod, string providerCode)
{
if (string.IsNullOrWhiteSpace(providerCode)) providerCode = null;
if (string.IsNullOrWhiteSpace(shipmentMethod) || shipmentMethod == "0") shipmentMethod = null;
return (OrgID == 0 || orgid == OrgID) &&
PostcodeFrom.Length == postcode.Length &&
string.CompareOrdinal(PostcodeFrom, postcode) <= 0 &&
string.CompareOrdinal(PostcodeTo, postcode) >= 0 &&
(ShipmentMethod == null || shipmentMethod == ShipmentMethod) && (ProviderCode == null || providerCode == ProviderCode);
}
我不使用進行AsParallel()會幫助這裏的想法。 200萬條記錄中有多少通過'IsMatch()'過濾器? –
Matthew,我已經更新了這個問題 –
如果大部分記錄都通過了'IsMatch()'過濾器,這是非常低效的。您實際上不需要對查詢結果進行排序,因爲您只需要一個具有最低「OrderID」的對象。考慮使用'Min()'來代替。 – dymanoid