0

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 分。

では、クライアントへのレポートの「配信」時間を短縮する他の方法はありますか?

すべての返信ありがとうございます

4

1 に答える 1

0

ストアド プロシージャの実行時間を停止する必要があります。しかし、それはそれ自体が全体的な質問と回答です。

HTML を書き出す方法が必要以上に遅いです。基本的に、文字列の連結を繰り返していますが、これは遅いです。Response ストリームに書き込む前に 、 StringBuilderを使用してドキュメント全体を構築することを検討してください。

別のオプション (そしておそらくより良いオプション) は、無料の Excel Xml Writer ライブラリのようなものを試すことです: http://www.carlosag.net/tools/excelxmlwriter/。使ったことはありませんが、良いと聞きました。これにより、Excel 自体をインストールしなくても、Excel ファイルをサーバーに書き込むことができるようになります (私は信じています)。

于 2013-02-28T03:48:22.597 に答える