2011-07-14 27 views
3

我們正在嘗試運行使用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); 
    } 
+0

我不確定更多的內存是否會有效地解決您的問題。我認爲正確的解決方案是創建一個異步隊列,將分塊作業(每次500個左右的收件人)推送到隊列中,並讓一個工作人員(或多個工作人員進行水平縮放)處理這些作業。在將所有合併作業推送到隊列中之後,如果需要,推入最終作業將所有生成的文檔合併到單個文檔中。 – cfeduke

+0

@cfeduke:謝謝,是的,會有其他解決方案的問題,不一定是異步的。我們可以像你說的那樣創建500個塊,然後將它們合併成一個文件(儘管這也可能需要很多memorey)。但是,像這樣的問題可能更容易解決,而更易於訪問的內存,理論問題仍然是爲什麼只使用16 GB。 – Olaf

回答

1

您可以嘗試在x64模式下編譯您的Web應用程序。

+0

有趣的想法。我明天會試試。 – Olaf

+0

太糟糕了,不起作用。第三方組件是32位。但是,32位應用程序是否仍然可以解決超過16 GB的問題? – Olaf

+0

不在Windows上。 – cfeduke

相關問題