我們正在嘗試運行使用Spire.doc創建Word mailmerge文檔的.NET 4 Web應用程序(位於8 GB,8核心Windows 2008 R2 64位Webedition服務器上)。一切工作正常,最高約5000條記錄。如果我們嘗試合併更多,物理和虛擬內存都會消耗所有可能的內存,每個內存大約8 GB。Windows 2008 R2 Web服務器上的.NET Web應用程序只能處理16 GB RAM,而不是32個 - 爲什麼?
問題:根據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個塊,然後將它們合併成一個文件(儘管這也可能需要很多memorey)。但是,像這樣的問題可能更容易解決,而更易於訪問的內存,理論問題仍然是爲什麼只使用16 GB。 – Olaf