私は現在、連続して約 16000 通の電子メール (ニュースレター) を生成する必要があるバッチに取り組んでいます。
スパムであるかどうかにかかわらず、私の質問は、これらの電子メールをどのように生成するかについてです。
メッセージの一部のフィールドは、カスタム値 (日付、ユーザー名など) に置き換える必要があります。
締め切りとコードの再利用性の理由から、私のテンプレートは、正規表現で簡単に見つけられるいくつかの「_FIELDNAME」フィールドを含む HTML ファイルです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
...
<body>
<p>Hi _NAME, _DATE newsletter.</p>
</body>
...
ファイルは約 1000 行なので、ロードすると非常に大きな文字列になります。
まず、HTML ファイル テンプレートを文字列で 1 回読み込みます。
string template = File.ReadAllText(@"Template/newsletter.html");
そして、置換関数は次のようになります:
return new StringBuilder(template)
.Replace("_DATE", profileConfig.SelectedMonth.ToString("MMMM yyyy"))
.Replace("_NAME", profileConfig.Name)
.ToString();
問題は、反復ごとにメモリ消費量がわずかに増加することです。1000回の反復で約50MBです。これは、私の置換機能によるものです(コメントしようとすると、メモリリークがなくなりました)。
16000回の反復でメモリをオーバーフローさせずに、テンプレート内の多くのフィールド (~50) を置き換えるにはどうすればよいですか? 正規表現(ただし文字列を使用)や一時ファイルを使用するなど、いくつか試してみましたが、どちらも満足できませんでした。
よろしくお願いします。