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