簡體   English   中英

如何提高linq查詢的性能?

[英]How to improve performance of my linq query?

我有以下代碼使用Linq。

 return (from item in this
          where item.IsMatch(orgid, postcode, shipmentMethod, providerCode)
          orderby item.OrderID
          select item.DTime).FirstOrDefault();

對於200萬條記錄,返回一個值需要超過10分鍾。 有人可以幫我如何使用ParallelEnumerable將此查詢轉換為一個查詢嗎?

歡迎任何其他有關如何優化性能的建議。

***上面的示例引用了從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);
}

嘗試

return this.AsParallel()
    .Where(p=> p.IsMatch(orgid, postcode, shipmentMethod, providerCode))
    .Min(p=> p.OrderID)
    .Select(p=> p.DTime);

正如dymanoid所提到的, OrderBy是不必要的。

TPL應該能夠在Where()Min()利用並行性

暫無
暫無

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

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