私は、ado.net /(またはC#を使用している場合は他の方法)を使用してデータを取得する必要があるWindowsアプリケーションを作成しています。1つのテーブルから。データベーステーブルには明らかに100000
レコードがあり、ダウンロードには永遠に時間がかかります。
データをより速く取得できるより速い方法はありますか?
試しましたDataReader
が、まだ十分な速さではありません。
私は、ado.net /(またはC#を使用している場合は他の方法)を使用してデータを取得する必要があるWindowsアプリケーションを作成しています。1つのテーブルから。データベーステーブルには明らかに100000
レコードがあり、ダウンロードには永遠に時間がかかります。
データをより速く取得できるより速い方法はありますか?
試しましたDataReader
が、まだ十分な速さではありません。
データ リーダー API は、実行できる最も直接的なものです。重要なことは、時間はどこですか?
クエリをマシン上でローカルに実行することで確認でき、所要時間を確認できます。帯域幅が限界の場合、実際に試すことができるのは、実際には必要のない列を削除することだけです (しないでくださいselect *
)。または、あなたとサーバー間のより太いパイプの料金を支払います。場合によっては、データをローカルでクエリし、圧縮形式で返すと役立つ場合がありますが、実際には、他の帯域幅に関する考慮事項がある Web サービスのようなものについて話していることになります。
ただし、問題はクエリ自体にある可能性が高いです。多くの場合、次のようなものです。
基礎メソッドを知る必要性を実装したい場合があります。必要なデータの最初のチャンクのみを取得し、次のセットが必要になったときにそれらの行を取得します。
ストリーミング プロセスではなく、おそらくクエリが非常に遅いのです。あなたの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);
}