Spire.docを使用してWordメール・ドキュメントを作成する.NET 4 Webアプリケーション(8 GB、8コアWindows 2008 R2 64ビットWebeditionサーバー上)を実行しようとしています。すべてが正常に約5.000レコードまで動作します。より多くをマージしようとすると、物理メモリと仮想メモリは両方ともそれぞれ約8 GBのメモリを消費します。Windows 2008 R2 Webサーバー上の.NET Webアプリケーションは、32 GBではなく16 GB RAMしかアドレス指定できません - なぜですか?
質問:http://msdn.microsoft.com/en-us/library/aa366778%28v=vs.85%29.aspx#physical_memory_limits_windows_server_2008_r2によると、Windows 2008 R2 64bitは32 GBを提供します。
どうすればアプリケーションで仮想メモリを増やすことができますか?
ここにコードがありますが、質問はむしろ一般的です(そして、10.000ページのWord文書を作成するのはばかばかしいかもしれませんが、これは顧客が望むものです。はい、 :
private static void Merge(DataTable recipients, string template, string saveAs)
{
Document document = new Document();
document.LoadFromFile(template);
document.MailMerge.Execute(recipients);
document.ViewSetup.DocumentViewType = DocumentViewType.PrintLayout;
document.SaveToFile(saveAs, FileFormat.Doc);
}
私は、より多くのメモリが問題を効率的に解決するとは確信していません。私は正しい解決策は、非同期キューを作成し、チャンクされたジョブ(一度に500人程度の受信者)をキューにプッシュし、ワーカー(または複数のマシンで水平にスケーリングできるワーカー)がこれらのジョブを処理することです。すべてのマージジョブをキューにプッシュした後、最後のジョブをプッシュして、生成されたすべてのドキュメントを単一のドキュメントにまとめます(必要な場合)。 – cfeduke
@cfeduke:ありがとうございます。問題には他にも解決策があります。必ずしも非同期である必要はありません。私たちはおそらくそれぞれ500個ずつのチャンクを作成し、それらを1つのドキュメントにマージすることができます(これには多くのメモも必要かもしれませんが)。しかし、このような問題は、よりアクセスしやすいメモリで簡単に解決できる可能性があり、理論上の疑問は、16GBしか使用されない理由です。興味深いアイデア。 – Olaf