MS VS 2008,ASP.Net 3.5。在客户端:客户端选择开始和结束日期,报表格式为 Excel,单击“运行报表”按钮在单击重定向到 reportToExcel.aspx 时,在 Page_Load 事件存储过程中的 reportToExcel.aspx.vb 中执行以检索报表数据:
oSQLDataReader = oSqlCommand.ExecuteReader()
然后:
Response.ContentType = "application/ms-excel"
Response.AddHeader("Content-Disposition", "attachment; filename=" + MyBase.UserSession.ReportName + ".xls")
然后 Response.Write 用于将检索到的报表数据以 XML 格式写入 Response 对象,如
Response.Write("<td>" & FormatColumnValue(oSQLDataReader.GetValue(I), arrColHeader(I + 1).ColumnFormat) & "</td>"), etc. Last callis Response.End().
我知道 Response.End 不应该被使用,我打算用 is with
context.Response.Flush()
context.ApplicationInstance.CompleteRequest()
但我怀疑它会改善响应时间。
问题:在客户端需要 6 分钟来接收 32.5 MB 的数据。这太长了。如何减少这个时间?
据我所知:Excel 报告无法进行分块,无论如何客户都希望收到一个完整的 Excel 报告。为了使用 Response.TransferFile :必须首先创建 Excel 文件,然后压缩以减少要下载的数据量,然后再下载。为此,应在服务器上安装 Excel,这在我们的案例中是不可接受的。
将数据以 csv 格式交付给客户是不可接受的:客户必须将其导入 Excel,这是他们不喜欢的。
从 SQL 管理工作室执行的存储过程显示不一致的运行时间:从 12 秒到 4 分钟。
那么,还有其他方法可以减少向客户“交付”报告的时间吗?
谢谢大家的回复