Я пытаюсь обновить стандартный запрос LINQ для использования PLINQ. Стандартный запрос выглядит следующим образом:System.OutOfMemoryException с PLINQ
var query = (from doc in this.ownershipRepository.GetDocuments()
let queryStateCode = this.currentQuery.StateCode
let queryCountyCode = this.currentQuery.CountyCode
where queryStateCode != null ? doc.StateCode == queryStateCode : true &&
queryCountyCode != null ? doc.CountyCode == queryCountyCode : true
orderby doc.Owner
select doc)
.Take(QUERY_RESULTS_SIZE);
метод .GetDocuments() в хранилище просто так:
public class OwnershipRepository : IDisposable
{
private OwnershipEntities context;
...
public IQueryable<Document> GetDocuments()
{
return this.context.Documents;
}
...
}
И это прекрасно работает. Я пытался использовать запрос с PLINQ следующим образом:
var query = (from doc in this.ownershipRepository.GetDocuments().AsParallel()
let queryStateCode = this.currentQuery.StateCode
let queryCountyCode = this.currentQuery.CountyCode
where queryStateCode != null ? doc.StateCode == queryStateCode : true &&
queryCountyCode != null ? doc.CountyCode == queryCountyCode : true
orderby doc.Owner
select doc)
.AsSequential()
.Take(QUERY_RESULTS_SIZE);
Но это бросает System.OutOfMemoryException. Я проверяю это на машине со следующими спецификациями:
Intel (R) ядро (TM) i7 CPU 860 @ 2.80GHz 2,79 ГГц/4 ГБ памяти
Есть ли что-то мне нужно чтобы оптимизировать этот запрос, чтобы он не вызывал проблем с памятью?
Благодарим за отзыв. Я поменял свой запрос, как вы предлагали, но я все еще получаю исключение OutOfMemoryException. Это происходит при инициализации свойства List на одном из объектов. У меня есть подкласс EntityObject, называемый StatefulEntityObject, где я устанавливаю некоторые свойства, которые используются для управления состоянием сущностей во время бизнес-транзакции. Я знаю, что в ObjectContext есть функции управления состоянием, но у этого есть некоторые настраиваемые элементы, которые я использую для установки состояния представления строк в сетке, к которым привязаны объекты. –
lintmouse
Я думаю, что наличие этого подкласса - это то, что вызывает мои беды. Я буду помнить ваше предложение о будущих реализациях PLINQ, когда я не использую свой собственный обременительный подкласс. – lintmouse