私は 20 万件のレコードをクエリしており、サーバーのメモリをすべて使い果たしています (驚くことではありません)。私はLINQを初めて使用するので、役立つはずの次のコードを見つけましたが、使用方法がわかりません。
public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> collection, int batchSize)
{
List<T> nextbatch = new List<T>(batchSize);
foreach (T item in collection)
{
nextbatch.Add(item);
if (nextbatch.Count == batchSize)
{
yield return nextbatch;
nextbatch = new List<T>(batchSize);
}
}
if (nextbatch.Count > 0)
yield return nextbatch;
}
ソース: http://goo.gl/aQZIj
「メモリ不足」エラーを作成するコードは次のとおりです。新しいバッチ関数をコードに組み込むにはどうすればよいですか?
var crmMetrics = _crmDbContext.tpm_metricsSet.Where(a => a.ModifiedOn >= lastRunDate);
foreach (var crmMetric in crmMetrics)
{
metric = new Metric();
metric.ProductKey = crmMetric.tpm_Product.Id;
dbContext.Metrics.Add(metric);
dbContext.SaveChanges();
}