private void test1()
{
for (int i = 0; i < dt.Rows.Count; i++)
            {
                StringBuilder sbValues = new StringBuilder();
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    sbValues.Append(dt.Rows[i][j].ToString()).Append(",");
                }
                //插入数据库
                
            } 
}private void test2()
{
StringBuilder sbValues = new StringBuilder();
for (int i = 0; i < dt.Rows.Count; i++)
            {
        sbValues.Length = 0;
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    sbValues.Append(dt.Rows[i][j].ToString()).Append(",");
                }
                //插入数据库
                
            } 
}

解决方案 »

  1.   

    下面的要好,不用每次给StringBuilder重新分配空间
      

  2.   

    建议楼主这样写....private void test2()
    {
        StringBuilder sbValues = new StringBuilder();
        int rows = dt.Rows.Count;
        for (int i = 0; i < rows; i++)
        {
            sbValues.Length = 0;
            int columns = dt.Columns.Count;
            for (int j = 0; j < columns; j++)
            {
              sbValues.Append(dt.Rows[i][j].ToString()).Append(",");
            }
            //插入数据库
        }  
    }可以看下for循环的实现...
      

  3.   

    test2比较快,至少不用重新将对象实例化
      

  4.   

    单纯从2种编码的方式上讲,第2种重用同一个StringBuilder对象,会比第1种中反复构造StringBuilder对象效率一些。即使如此,第2种方式中,也应该用StringBuilder的方法Clear(),而不是直接把长度置零。这样更符合语义逻辑一些。
      

  5.   

    第二种会高点,你把StringBuilder 放到循环里面的话   会每循环一次就会创建一个新对象,而第二种放到外面就只会创建一个对象