這是我的問題..導出大量的數據
我們有2種類型的報告在我們的網站,數據顯示在網格和數據即時下載爲報告。
這些報告可能包含幾年的數據(超過一百萬行),我們一直允許客戶根據日期範圍下載數據,但我們已經開始限制他們查看數據的時間以防止出現性能問題在我們的網站。然而,即使在一個小的日期範圍內,數據仍然變得非常大,現在它們正在擴展,並且如果它們下載太多,我們的內存會超過幾個演出並耗盡內存。
問題我有,我寧願不限制他們的數據,所以我想找出一個好的解決方案,讓他們下載儘可能多的,他們想要的。
我可以通過僅返回每頁數據來限制他們看到的內容,因此沒有性能問題,但下載始終是問題。
我已經看過異步,但沒有成功地得到它的工作,因爲它在加載數據時激發內存。
想法?思考?建議?
代碼示例:
// Get Data SqlConnection con = new SqlConnection(); SqlCommand cmd = new SqlCommand(); SqlDataAdapter da; DataSet ds = new DataSet(); con.ConnectionString = "MyConnectionString"; con.Open(); cmd.Connection = con; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "MyStoredProc"; da = new SqlDataAdapter(cmd); da.Fill(ds); con.Close(); StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); DataGrid dg = new DataGrid(); dg.DataSource = ds.Tables[0]; dg.DataBind(); dg.RenderControl(htw); Response.ClearContent(); Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment;filename=Report.xls"); Response.Write(sw.ToString()); Response.End();
當我與我的數據..這是大約80萬行,我的記憶尖峯運行此,我得到一個內存不足的錯誤,並且使事情變得更糟..它總是豬在RenderControl直到它完成
獲得更多的信息,爲什麼不乾脆扔在硬件的問題,並添加一些新的內存條?這些日子他們很便宜。 – ashes999
這不是一個選項,不能因爲內存問題而增加ram,特別是因爲報告通常會高達4GB – jaekie