私はこのような考えを持っています(悪いことや良いことは知らない)。 私はreglamentによってSQLサーバに接続し、アプリケーションにデータを取り込むユーティリティを持っています。データは単純です(2つのvarcharテキスト属性)が、データ数は約3百万行です。だから、私のアプリケーションは非常に集中的にネットワークを使います。 SQL DataReader
によってネットワーク帯域幅の使用量をプログラムで制限(制限、調整など)することはできますか?よりゆっくりと動作させますが、サーバーやクライアントのどちらにも負荷をかけないようにしてください。このアイデアは良いですか?そうでなければ、私は何をしなければなりませんか?ここでSQL DataReaderのネットワーク使用制限
は、これまでのコード、次のとおりです。
using (SqlConnection con = new SqlConnection("My connection string here"))
{
con.Open();
using (SqlCommand command = new SqlCommand(query, con))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
yield return new MyDBObject()
{
Date = (DateTime)reader["close_date"],
JsonResult = (string)reader["json_result"]
};
}
}
}
}
はい - データ・リーダーを使用すると、クライアント側のすべてのデータをマテリアライズする必要なく、大きなデータ・セットを遅延評価することができます。データアクセスでasync/awaitを使用する場合は、yield returnジェネレータを別の関数(またはおそらくローカル関数)に移動する必要があります。 [Example here](https://stackoverflow.com/a/47376646/314291) – StuartLC
クライアントで効果的に調整することはできません。そうするならば、サーバー側のロックとバッファーを保持し、行を生成できないスレッドをブロックするだけです - たとえ "動作"しても、帯域幅を減らすという意味で、サーバーの待機統計はスパイクは、ASYNC_NETWORK_IOの待ち時間が多い心配のあるDBAから注目を集めることができます。呼び出しごとにフェッチするデータ量を減らして、他のクエリのための余地を残しても、できるだけ早くフェッチしているデータを常に処理できます。 –