2011-07-14 6 views
3

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); 
    } 
+0

私は、より多くのメモリが問題を効率的に解決するとは確信していません。私は正しい解決策は、非同期キューを作成し、チャンクされたジョブ(一度に500人程度の受信者)をキューにプッシュし、ワーカー(または複数のマシンで水平にスケーリングできるワーカー)がこれらのジョブを処理することです。すべてのマージジョブをキューにプッシュした後、最後のジョブをプッシュして、生成されたすべてのドキュメントを単一のドキュメントにまとめます(必要な場合)。 – cfeduke

+0

@cfeduke:ありがとうございます。問題には他にも解決策があります。必ずしも非同期である必要はありません。私たちはおそらくそれぞれ500個ずつのチャンクを作成し、それらを1つのドキュメントにマージすることができます(これには多くのメモも必要かもしれませんが)。しかし、このような問題は、よりアクセスしやすいメモリで簡単に解決できる可能性があり、理論上の疑問は、16GBしか使用されない理由です。興味深いアイデア。 – Olaf

答えて

1

x64モードでWebアプリケーションをコンパイルしようとする可能性があります。

+0

私は明日それを試してみるでしょう。 – Olaf

+0

あまりにも悪い、動作しません。第三者コンポーネントは32ビットです。しかし、32ビットアプリケーションが16 GB以上のアドレスを扱うことはできませんか? – Olaf

+0

Windowsでは使用できません。 – cfeduke

関連する問題