none
帮忙看下 dataset批量操作加上了优化代码可是效果不明显啊 RRS feed

  • 问题

  • private void button1_Click(object sender, EventArgs e)
        {
          Stopwatch sw = new Stopwatch();
          sw.Start();
          T_UsersTableAdapter adapter = new T_UsersTableAdapter();
          adapter.Connection.Open();
          for(int i=0;i<3000;i++)
          {
            adapter.Insert(i.ToString(), i.ToString());    
          }
          adapter.Connection.Close();
          sw.Stop();
          MessageBox.Show(sw.Elapsed.ToString());
    
        }
    
    加上adapter.Connection.Open()和adapter.Connection.Close()可是处理时间只缩短了两三秒是怎么回事啊?(加上打开和关闭后是16秒,没加是19秒)
    2011年4月8日 11:17

答案

  • 显式关闭连接,并不会对性能带来多大的提升。

    T_UsersTableAdapter 不清楚你这个类是如何写的,如果每一次insert操作都是提交到数据库的话,你这段代码的所谓优化并没太大作用,因为每次insert都相当于创建了一个隐藏的事务,建议你把多个insert操作显式放在同一个事务里,这样性能的提升会提高很多。

    2011年4月9日 14:44

全部回复

  • 显式关闭连接,并不会对性能带来多大的提升。

    T_UsersTableAdapter 不清楚你这个类是如何写的,如果每一次insert操作都是提交到数据库的话,你这段代码的所谓优化并没太大作用,因为每次insert都相当于创建了一个隐藏的事务,建议你把多个insert操作显式放在同一个事务里,这样性能的提升会提高很多。

    2011年4月9日 14:44
  • 我的T_UsersTableAdapter是用visual studio自动生成dataset那样直接托到数据集中的,先把连接显示打开了那样每次insert的时候它不是应该不会断开连接等所有的insert都执行完才会断开连接啊...我看到别人那样直接加了这两段代码后时间从四十几秒直接缩短成了两秒 。。可是在我这里怎么不对劲了 真是很郁闷...
    2011年4月9日 15:46
  • 用显示事务看看
    2011年4月9日 16:08
  • 本来就不需要用adapater来提高,很多sqlbulk等都可以批量添加的
    2011年4月10日 10:27