因为之前项目中使用string发现数据变大后使用str += str1 变得越来越慢,查了下具体原理。
string是一个不可变字符,当我使用str += str1 时候,他会重新给str初始化一次,当数据变大时候 赋值时间就越来越长,测试代码:
string str = ""; StringBuilder strbuilder = new StringBuilder(" "); Int64 num = Convert.ToInt64(textBox1.Text); DateTime dt = DateTime.Now; for (Int64 i = 0; i < num; i++) { //str += i.ToString(); //string 追加 //strbuilder.Append(i); //stringbuilder追加 //str = strbuilder.ToString(); //str = " "; //strbuilder = new StringBuilder(" "); } DateTime dt1 = DateTime.Now; label1.T
string += i.tostring()当测试一万次加 时候需要68MS ,十万次加时候需要17147MS,百万次等待时间太长不做测试。
使用strbuilder.Append(i);十万次18MS,百万次132MS,千万次1505MS。
可以看出strbuilder.Append(i),没有因为数据过大时候累加时间。
所以在这种大数据追加修改情况下,推荐使用StringBuilder。
还有一个问题就是C#控件的text属性是string类型,赋值过去的话还是需要很长的时间,暂时没有解决这个问题