2012-01-04 146 views
4

我知道DataAdapter有性能問題,但有沒有辦法解決它可能會更快?目前,DataAdapter.Fill方法在3000條記錄上花費5-6秒,對我的應用來說太慢了。如果我刪除Fill行並僅執行SQL(使用SQLCE),則需要20毫秒,所以我猜猜查詢不是問題。我試過在數據表上添加BeginLoadData,但它對性能沒有影響。DataAdapter.Fill太慢

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 2012-01-04 17:33:49

+0

也許是連接速度是一個問題? – CamronBute 2012-01-04 17:34:18

+0

你可以粘貼代碼,你聲明和填充dTable ..?同樣,如果你正在做的更新或刪除或插入的東西使用DataReader,而不是更快 – MethodMan 2012-01-04 17:34:21

回答

1

您可以將DataGridView綁定到DataReader,但它可能不會更好,因爲將3000行加載到DataGridView中並不快。

+0

是否有更好的DGV替代方案,允許用戶以類似Excel的方式編輯數據? – Skoder 2012-01-04 17:42:58

+1

沒什麼是免費的。你可以試試Telerik RadGridView或DevExpress XtraGrid。另一個選擇是做一些分頁。 – 2012-01-04 17:47:57

+0

看看綁定..我也會親自更改該數據表,並與Datareader一起去..你是否知道你可以綁定datagrid到List <>以及可能會更快......只是一個FYI .. – MethodMan 2012-01-04 17:48:07

1

核心問題是一次加載3000個用戶。無論如何加載300條記錄,數據量都是問題。在sql查詢中實現分頁以允許用戶查看記錄的子集。用戶可以在需要時導航到更多記錄。

0

使用BatchUpdate/BatchInsert。請確保您指定的UpdateBatchSize = 3000(數你有記錄)

這裏是如何做到這一點的例子:BatchInsert

+0

我收到「不支持的異常」。我正在使用SqlCE,而不是SQL Server。另外,SqlCE不支持存儲的特效。 – Skoder 2012-01-04 17:55:43

+0

我很抱歉,我沒有意識到你正在使用SqlCE。 – 2012-01-04 17:58:40

+0

不用擔心,我已經瞭解了UpdateBatchSize以供將來參考;) – Skoder 2012-01-04 18:01:50