0

私は、ado.net /(またはC#を使用している場合は他の方法)を使用してデータを取得する必要があるWindowsアプリケーションを作成しています。1つのテーブルから。データベーステーブルには明らかに100000レコードがあり、ダウンロードには永遠に時間がかかります。

データをより速く取得できるより速い方法はありますか?

試しましたDataReaderが、まだ十分な速さではありません。

4

3 に答える 3

3

データ リーダー API は、実行できる最も直接的なものです。重要なことは、時間はどこですか?

  • データを転送する際の帯域幅ですか?
  • それとも基本的なクエリにありますか?

クエリをマシン上でローカルに実行することで確認でき、所要時間を確認できます。帯域幅が限界の場合、実際に試すことができるのは、実際には必要のない列を削除することだけです (しないでくださいselect *)。または、あなたとサーバー間のより太いパイプの料金を支払います。場合によっては、データをローカルでクエリし、圧縮形式で返すと役立つ場合がありますが、実際には、他の帯域幅に関する考慮事項がある Web サービスのようなものについて話していることになります。

ただし、問題はクエリ自体にある可能性が高いです。多くの場合、次のようなものです。

  • 賢明なtsqlを書く
  • 適切なインデックスを追加する
  • カーソル、複雑な処理などを避ける
于 2012-11-06T14:25:43.013 に答える
0

基礎メソッドを知る必要性を実装したい場合があります。必要なデータの最初のチャンクのみを取得し、次のセットが必要になったときにそれらの行を取得します。

于 2012-11-06T14:22:54.977 に答える
0

ストリーミング プロセスではなく、おそらくクエリが非常に遅いのです。あなたのSQLクエリを私たちに見せてください。そうすれば、それを改善するのに役立ちます.

テーブルから 100000 レコードすべてを取得したいと仮定すると、 aSqlDataAdapterに aDataTableまたは aSqlDataReaderを使用して a に入力できList<YourCustomClass>ます。

DataTableアプローチ(あなたのフィールドがわからないので、クラスを表示するのは難しいです):

var table = new DataTable();
const string sql = "SELECT * FROM dbo.YourTable ORDER BY SomeColumn";
using(var con = new SqlConnection(Properties.Settings.Default.ConnectionString))
using(var da  = new SqlDataAdapter(sql, con))
{
    da.Fill(table);
}
于 2012-11-06T14:29:20.837 に答える