【问题标题】:DataAdapter.Fill too slowDataAdapter.Fill 太慢
【发布时间】:2012-02-02 14:42:17
【问题描述】:

我知道 DataAdapter 存在性能问题,但有什么方法可以更快地解决这个问题吗?目前,DataAdapter.Fill 方法在 3000 条记录上需要 5-6 秒,这对我的应用程序来说太慢了。如果我删除 Fill 行并只执行 SQL(使用 SQLCE),则需要 20 毫秒,所以我猜查询不是问题。我尝试在数据表上添加BeginLoadData,但这对性能没有影响。

 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 方法?

【问题讨论】:

  • 也许是连接速度有问题?
  • 你能把代码粘贴到你声明和填充 dTable 的地方吗?此外,如果您正在执行更新、删除或插入等操作,请改用 DataReader .....快得多
  • 我添加了额外的代码并删除了BeginLoadData。我将数据库移动到本地计算机以确保它不是连接问题。 @DJ Kraze,我虽然更新、删除和插入主要用于 DataAdapters,而 DataReaders 用于只读内容?
  • 如果你注释掉dataGridView1.DataSource = dTable;这一行并离开dAdapter.Fill(dTable);是什么时候?我想它的绑定数据做 DGV 可能很慢,没有填满表格。
  • @mj82 - 不,我认为它也可能是 DGV,但如果我删除 DataSource,时间是一样的。肯定是 Fill 方法导致延迟。

标签: c# performance datagridview sql-server-ce dataadapter


【解决方案1】:

您可以改为将 DataGridView 绑定到 DataReader,但这可能不会好很多,因为将 3000 行加载到 DataGridView 中并不快。

【讨论】:

  • 是否有更好的 DGV 替代方案,允许用户以类似 Excel 的方式编辑数据?
  • 没有什么是免费的。你可以试试 Telerik RadGridView 或 DevExpress XtraGrid。另一种选择是进行一些分页。
  • 看看绑定..我也会亲自更改 DataTable 并使用 Datareader.. 你知道你可以将数据网格绑定到 List 可能会更快......只是仅供参考..
  • @DJKraze - DataReader 在这里并没有快多少。
  • 那和 datareader 需要一个打开和连接的数据库连接。在绑定到 UI 时保持打开是没有意义的。而是将记录加载到 DTO 中,处理命令,然后绑定到 UI。
【解决方案2】:

核心问题是一次为用户加载 3000 个。不管怎么加载300条记录数据量都是问题。在 sql 查询中实现分页以允许用户查看记录子集。然后,用户可以在需要时导航到更多记录。

【讨论】:

    【解决方案3】:

    使用 BatchUpdate/BatchInsert。确保您指定 UpdateBatchSize = 3000(您拥有的记录数)

    下面是一个例子:BatchInsert

    【讨论】:

    • 我得到一个“不支持的异常”。我使用的是 SqlCE,而不是 SQL Server。另外,SqlCE 不支持存储过程。
    • 对不起,我没有意识到你正在使用 SqlCE。
    • 别担心,我已经了解了 UpdateBatchSize 以供将来参考;)
    猜你喜欢
    • 2014-12-12
    • 2011-10-29
    • 2019-02-12
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多