2

WCFエンドポイントを使用してHTTP経由でSQL表形式データを送信する最速の方法は何でしょうか?

現在、ESQLを使用してEntity Frameworkにクエリを実行し、DataTableの結果をbyte []に​​シリアル化して送信し、もう一方の端で逆シリアル化しています。これは遅いようです。現在、シリアル化されたデータのサイズは、15000行以上で約4000バイトになります。私もODataServicesを試しましたが、それもかなり遅かったです。

最速だと思うJSONとは対照的に、1048行のSQL行のみを含むJSONファイルはほぼ200000バイトになります。データのサイズとHTTPを介した転送速度との間に直接的な相関関係はありますか?(直感的に思えますが、私は前向きではありません)。

最速のフォーマットは何でしょうか?SQLDataReaderを使用してJSONに移行し、JSONを送信することを考えています。これはうまくいくはずですが、よくわかりません。これは、データ同期のみを目的としています。

ありがとう。

編集 もう少しトレースしました、私の最初の測定のいくつかが間違っていたようです。以下のそれぞれの方法をミリ秒単位で参照してください。

2011年7月11日月曜日午後6時42分23秒::関数「逆シリアル化」期間。経過:481ミリ秒

2011年7月11日月曜日午後6時42分23秒::関数'HttpRequest'期間。経過:4776ミリ秒

2011年7月11日月曜日午後6時42分22秒::DataTableの長さ(バイト)=13047247バイト

上で参照したDataTableには約7000行が含まれていましたが、急勾配のようですよね?

4

1 に答える 1

1

SqlDataReader は、データベースからデータを取得する最速の方法です。その場合の問題は、HTTP 経由で送信する前に、結果を完全に組み立てる必要があることです。データベースから読み取られた結果をストリーミングすることはできません。JSON はデータを表現するかなり厳密な方法ですが、列名を何度も繰り返す必要があるため、単純なプレーン テキストのタブ区切りの値ファイルを使用する方がはるかに優れています。Content-type = text/plain を設定し、SqlDataReader からデータを取得するときにデータからタブを削除します。また、ネットワークの速度と Web サーバーの処理能力によっては、結果を gzip することを検討することもできます。

- 編集 -

Sean が正しく指摘したように、プレーン テキスト オプションは WCF ソリューションではありません。

于 2011-07-12T01:57:44.847 に答える