У меня есть следующий код с использованием 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() поможет. Сколько из 2 миллионов записей передает фильтр 'IsMatch()'? –
Matthew, я обновил вопрос –
Это очень неэффективно, если большинство записей передают фильтр 'IsMatch()'. Вам не нужно сортировать результаты запроса, так как вы берете только объект с самым низким 'OrderID'. Вместо этого используйте 'Min()'. – dymanoid