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 を使用すべきではないことはわかっています。代わりに使用する予定です
context.Response.Flush()
context.ApplicationInstance.CompleteRequest()
しかし、それによって応答時間が改善されるとは思えません。
問題: クライアント側で 32.5 MB のデータを受信するのに 6 分かかります。これは長すぎです。この時間を短縮するには?
私がこれまでに理解したように、Excel レポートのチャンクは不可能であり、とにかくクライアントは Excel レポートを 1 つの全体として受け取りたいと考えています。Response.TransferFile を使用するには、まず Excel ファイルを作成し、ダウンロードするデータ量を減らすために圧縮してからダウンロードする必要があります。これを機能させるには、サーバーに Excel をインストールする必要がありますが、この場合は受け入れられません。
データを csv としてクライアントに配信することは受け入れられません。クライアントはそれを Excel にインポートする必要がありますが、これは望んでいません。
SQL Management Studio から実行されるストアド プロシージャは、一貫性のない実行時間を示します: 12 秒から 4 分。
では、クライアントへのレポートの「配信」時間を短縮する他の方法はありますか?
すべての返信ありがとうございます