2010-11-09 26 views
2

我正在尋求關於生成CSV報告的建議。生成在ASP.NET中有100萬行以上的CSV報告

我有一個ASP.NET應用程序生成帳單數據報告。最近,我注意到當它試圖導出報告文件時,Web應用程序沒有響應,並且會拋出OutOfMemory異常或服務器超時異常。

我所做的修改,這是到:

  • 將在SQL服務器的必要指標,以獲得記錄更快
  • 使用SqlDataReader對象來從SQL服務器數據
  • 指定所需的標準提取必要的記錄,而不是在一次通話中獲取所有信息。

我也想過限制的最大記錄數的從數據庫返回,但是系統要求不管行數有多大返回,因爲下載的信息將成爲我們客戶的財務記錄至關重要產生的所有信息。

我想知道,什麼方法/解決方案可以用來呈現在ASP.NET中有大量數據的CSV報告?

期待您的回覆。

乾杯, 安

+0

有些代碼會有幫助 - 應該有辦法解決內存不足的問題,但除非我們能看到代碼,否則不能肯定地說。 – Hogan 2010-11-09 21:47:08

+1

由於SQL執行,您是否內存不足?或者當數據被寫入CSV? – BeemerGuy 2010-11-09 21:48:36

+1

您應該一次讀取一行,並將一個CSV記錄一次推送到流中。這樣,沒有使用額外的內存。不看源頭,很難說哪個是問題。 – McKay 2010-11-09 21:49:08

回答

2

要解決服務器超時異常,我會嘗試異步生成報告。因此,當您的應用程序接收到生成報告的請求時,它應該啓動另一個線程來生成並立即返回請求。

然後,您需要另一個頁面讓訪問者在生成報告後提取報告。

這一切都需要在應用程序中多做一些工作,記錄正在生成的報告,並在完成時將其標記爲生成。

至於內存不足異常 - 這是特定於您生成報告的方式。除非你真的在做一些非常瘋狂的事情 - 例如你在CSV生成中消耗大量內存 - 例如創建大量和大量的字符串對象,這很少發生。確保你使用的是StringBuilder,或者更好的做法是將輸出直接輸出到文件中。

最後提示 - 如果您正在提供像這樣的大文件,請確保在您的IIS配置上爲這些文件類型啓用了GZIP或DEFLATE壓縮。這將大大減少要交付給客戶的包裹的大小 - 但需要花費一些處理時間。

+0

謝謝你......這就是我所追求的! – mallows98 2010-11-09 21:59:50

1

我想知道,什麼方法/可用於呈現那些在ASP.NET龐大的數據CSV報告的解決方案?

最好的方法是不是在ASP.NET中做到這一點。您需要一個單獨的進程,至少是您的ASP應用程序中的一個線程,但將其卸載到另一個服務器/服務會更好。

+0

謝謝Henk!這讚美詹姆斯的答案。真的很感激它! – mallows98 2010-11-09 22:00:16

1

預渲染它們並將它們下載爲URI \ files。我發現像這樣渲染大文件需要超出常規點擊&等待頁面渲染並返回。或者如果它們必須是onclick,像開始和偶爾的查詢來確定完成百分比好得多,當100%,然後你釋放的URI。

+0

謝謝debradsh!我也可以申請這個。再次感謝! – mallows98 2010-11-09 22:01:08