メールを作成して送信するためのWindowsサービスを作成しました。RazorEngineを使用してメールテンプレートを解析しています。モデルを作成するために動的ExpandoObjectを使用しています。
私の問題は、各電子メールが作成されて送信されるときにメモリが増加しているが、解放されないことです。Antsメモリプロファイラーを使用してサービスのプロファイリングを行いました(これまで使用したことはありません)が、次の結果が表示されます。
Razorエンジンを使用
Razor.Parse(text、model)を使用して200通の電子メールを解析する
ジェネレーション1:12.9kb
ジェネレーション2:15.88mb
ラージオブジェクトヒープ:290.9kb
.NETに割り当てられた未使用のメモリ:3.375mb
管理されていない:69.51mb
メモリフラグメントの総数:197
かみそりエンジンなし
解析されていないテキストを200通の電子メールで返します。
ジェネレーション1:13.87kb
ジェネレーション2:3.798mb
ラージオブジェクトヒープ:95.58kb
.NETに割り当てられた未使用のメモリ:4.583mb
管理されていない:44.58mb
メモリフラグメントの総数:7
Razorの最大の第2世代インスタンスは次のとおりです。
System.Reflection.Emit __FixUpData []-2,447,640ライブバイト、3,138インスタンス
オブジェクトがリリースされず、ジェネレーション2が成長している理由を誰かが知っていますか?テンプレートを解析するたびにRazorEngineの新しいインスタンスを作成する方法はありますか?テンプレートが終了すると、テンプレートは参照されず、GCに移動します。
テンプレートを解析するたびにテンプレートサービスの新しいインスタンスを作成しようとしましたが、これは違いを生みませんでした
using (ITemplateService templateService = new TemplateService())
{
result = templateService.Parse<ExpandoObject>(text, model);
}