2012-01-04 15 views
4

DataAdapterにパフォーマンスの問題があることは知っていますが、速度が速い可能性があります。現時点では、DataAdapter.Fillメソッドは3000レコードで5〜6秒かかっていますが、これは私のアプリケーションにとっては遅すぎます。 Fill行を削除してSQL(SQLCEを使用)を実行すると、20ミリ秒かかるので、クエリが問題ではないと推測しています。私はBeginLoadDataをデータテーブルに追加しようとしましたが、パフォーマンスに大きな違いはありません。DataAdapter.Fill too slow

using (SqlCeConnection con = new SqlCeConnection(conString)) 
{ 
     con.Open(); 
     using (SqlCeDataAdapter dAdapter= new SqlCeDataAdapter()) 
     { 

      using (SqlCeCommand com = new SqlCeCommand(query, con)) 
      { 
       com.Parameters.Add("uname", textBox1.Text); 
       dAdapter.SelectCommand = com; 
       dAdapter.SelectCommand.Connection = con; 

       DataTable dTable = new DataTable(); 


       dAdapter.Fill(dTable); 

       dataGridView1.DataSource = dTable; 


      } 
     } 
    } 

があるのDataGridViewを埋めるかFill方法をスピードアップするためのより良い方法はありますか?

+0

いいえ。 DataReaderを使用します。 – vcsjones

+0

おそらくそれは問題の接続速度ですか? – CamronBute

+0

あなたはdTableを宣言していてどこにコードを貼り付けることができますか?もしあなたがUpdateやDeletesやInsertのようなことをやっているのであれば、DataReaderを使うよりもはるかに高速です。 – MethodMan

答えて

1

DataGridViewをDataReaderにバインドすることはできますが、3000行をDataGridViewに読み込むだけでは高速ではないため、あまりうまくいかない場合があります。

+0

DGVの代わりに、Excelのような形式でデータを編集できる代替手段がありますか? – Skoder

+1

無料です。 Telerik RadGridViewまたはDevExpress XtraGridを試すことができます。別のオプションは、いくつかのページングを行うことです。 –

+0

バインディングを見ても、私はそのDataTableを個人的に変更し、Datareaderを使用します。List <>にデータグリッドをバインドできることも認識していますが、さらに高速になる可能性があります... – MethodMan

1

コアの問題は、ユーザーのために一度に3000を読み込んでいます。どのように300レコードをロードするにしても、データの量が問題になります。ユーザーがレコードのサブセットを表示できるように、SQL問合せ内でページングを実装します。ユーザーは必要なときにさらに多くのレコードにナビゲートできます。

0

BatchUpdate/BatchInsertを使用してください。あなたはUpdateBatchSize = 3000を指定していることを確認してくださいここでは(あなたが持っているレコード数)

はそれを行う方法についての例である:BatchInsert

+0

私は「サポートされていない例外」を取得します。 SQL Serverではなく、SqlCEを使用しています。また、SqlCEは格納されたprocsをサポートしていません。 – Skoder

+0

申し訳ありませんが、私はあなたがSqlCEを使用していることを認識していませんでした。 –

+0

将来の参照のためにUpdateBatchSizeについて学習しましたが心配はありません;) – Skoder