PLINQを使用するように標準のLINQクエリを更新しようとしています。標準のクエリは次のようになります。
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)Core(TM)i7 CPU 860 @ 2.80GHz 2.79 GHz /4GBメモリ
このクエリを最適化してメモリ不足の問題が発生しないようにするために必要なことはありますか?