3

このサーバー/クライアント アプリは C# で記述されています。サーバー側に SQL Server があり、クライアントがテーブルを必要とする場合、サーバー アプリケーションに要求を送信し、サーバー アプリケーションは SQL Server に接続してテーブルを取得し、NetworkStream を介してクライアントに送信します。

これは、DataSet XML ストリームを送信するサーバー側のコードです。

using (var networkStream = new NetworkStream(m_workerSocket[0]))
{
     dataSet.WriteXml(networkStream);
}

そして、このxmlファイルをバイトとして読み取って文字列に変換し、再度DataSetに変換しています。これはクライアント側のコードです:

TextReader reader = new StringReader(richTextRxMessage.Text);
DataSet dataSet = new DataSet();
dataSet.ReadXml(reader);
DataTable dtProd = new DataTable();
dataGridView1.DataSource = dataSet.Tables[0];

私の質問は、これはクライアント/サーバー間でテーブルを送信する効率的な方法ですか? 10k エントリなどの大きなテーブルでは問題になりますか? それを最適化するにはどうすればよいですか?

また、インスタント メッセージやさまざまな種類のファイルなどのこれらのテーブルを除いて、サーバーとクライアントの間で多くの通信が行われます。では、ファイルや DataSet などの大量のデータを処理および分類するにはどうすればよいでしょうか。たとえば、<DATASET>, <DOCFILE>送信するデータ型を識別するために、データを送信する前にカスタム文字列タグ (など) を配置する必要がありますか? ありがとうございました。

PS:非同期サーバーとクライアントを使用してデータを送受信しています。

4

2 に答える 2

1

効率的とは何を意味するかによって異なります。いくつかのトレードオフがあります。帯域幅を節約しようとしていますか? その場合、JSON や XML のようなプレーン テキスト形式は適していません。Base64エンコーディングを使用せずに、冗長性が低く、圧縮をサポートするプロトコルを使用することをお勧めします。もちろん、これはより多くの CPU サイクルを使用することを意味します。また、考慮すべきキャッシングもあります。クライアントのデータが最後に要求されてから無効化されているかどうかを確認できますか? その場合、セット全体または一部のセットを格納できるキャッシュ メカニズムを使用すると、帯域幅をさらに節約できます。もちろん、これは、ドライブに直接キャッシュすることに頼る場合、より多くのメモリとおそらくより多くのハード ドライブ領域を使用することを意味します。

あなたの質問は、あなたが思っているよりも少し深いと思います。

于 2012-12-01T20:02:51.700 に答える
0

このようなタスクには WCF を使用する必要があります。 ここでそれについて読むことができます

于 2013-01-18T05:16:42.980 に答える