【解決方法】Sqldataadapter データテーブルへの入力には数秒かかります


やあみんな
私はいくつかのプロジェクトに取り組んでおり、SQLデータベースからデータを取得してDatatableに入力しています。正常に動作しますが、パフォーマンスの問題です!
どうすればパフォーマンスを向上させることができ、パフォーマンスに関する提案があれば!

ありがとう!

私が試したこと:

C#
using (SqlCommand cmd = new SqlCommand("sp_loadGuest", MainClass.con))
{
    cmd.CommandType = CommandType.StoredProcedure;
    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
    {
        DataTable dt = new DataTable();
        da.Fill(dt);               // it takes many sec
        ...
    }
}

解決策 1

DataAdapter は DataReader と同じではありません。すぐには返らず、DB から行ごとにデータをフェッチします。 代わりに、データベース サーバーがすべてのデータを内部テーブルに完全にロードするのを待ちます。その後、単一のストリームとしてプレゼンテーション言語アプリに転送され、DataTable にまとめてロードされます。 行の完全なセットの準備ができて初めて、Fill メソッドがコードに戻ります。

そのため、SP が大量のデータを収集する場合、それはサーバー上でメモリ割り当ての確実なチャンクを意味し、その後にサーバーとアプリ PC の間の帯域幅のかなりのチャンクが続き、さらにチャンク (または多くの場合、多くのチャンク) が続きます。 )保存されたデータがあなたに渡される前に、PCのメモリ割り当ての。

これは、サーバー上で直接クエリを実行する場合と同じです。これは、行の表示を開始する前に必ずしも待機する必要はなく、利用可能なデータがあればすぐに表示を開始するため、純粋にかなり高速に見える場合があります。

このような問題は、PC と DB サーバーの両方でコードにアクセスする必要があり、問題が発生している実際のシステムでコードが実行されている間に処理中の実際の DB データにアクセスする必要があります。 そして、私たちはそのどれにもアクセスできません!

解決策 2

あれを使って
使用 (SqlDataAdapter da = 新しい SqlDataAdapter(cmd))
{
DataTable dt = 新しい DataTable();
cmd.CommandTimeout = 3600;
da.Fill(dt);
}

コメント

タイトルとURLをコピーしました