このメソッドを実行しようとしていますが、正常に動作しますが、数百回の内部反復のたびに、メモリ不足の例外が発生します。
...
MNDBEntities db = new MNDBEntities();
var regs = new List<DOCUMENTS>();
var query = from reg in db.DOCUMENTS
where reg.TAG_KEYS.Any(p => p.TAG_DATE_VALUES.FirstOrDefault().TAG_DATE_VALUE.HasValue
&& p.TAG_DATE_VALUES.FirstOrDefault().TAG_DATE_VALUE.Value.Year == 2012)
select reg;
var pages = new List<string>();
foreach (var item in query)
{
Document cert = new Document();
var tags = item.TAG_KEYS;
foreach (var tag in tags)
{
// Basic stuff...
}
var pagesS = item.PAGES;
foreach (var page in pagesS)
{
var path = @"C:\Kumquat\" + (int)page.NUMBER + ".vpimg";
File.WriteAllBytes(path, page.IMAGE);
pages.Add(path);
Console.WriteLine(path);
}
//cms.Save(cert, pages.ToArray()).Wait();
foreach (var pageFile in pages)
File.Delete(pageFile);
pagesS = null;
pages.Clear();
}
...
問題は File.WriteAllBytes または File.Delete に関連していると確信しています。これらの行にコメントを付けると、メソッドは例外なく実行されるからです。私がやっていることは、基本的にDBとドキュメント画像からいくつかのタグを取得し、その画像をディスクに保存してからcmsに保存してからディスクから削除することです。正直なところ、その File 呼び出しで何が間違っているのかわかりません。何か案が?
これは PerfView が示すものです:
これは、ビジュアル スタジオ 2012 プロファイラーがホット ポイントとして表示するものです。問題は、これはすべて生成されたコード (エンティティ モデル内) であり、モデルのプロパティで何か間違っているのでしょうか?