stringbuilder的学习

因为之前项目中使用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类型,赋值过去的话还是需要很长的时间,暂时没有解决这个问题

时间: 2024-10-23 19:25:51

stringbuilder的学习的相关文章

创建者模式Builder

创建者模式: 分离对象子组件的单独构造(由Builder来负责)和装配(由Director负责),对象的构造比较复杂时使用 该模式. 优点: 由于实现了构建和装配的解耦.不同的构建器,相同的装配也可以做成不同的对象,相同的构建器,不同的装配顺序也可以生产成不同的对象.也就是实现了构造算法和装配算法的解耦,实现了更好的复用. 应用场景: StringBuilder类的append方法. SQL中的PreparedStatement JDOM中,DomBuilder SAXBuilder 创建者模式

设计模式——建造者模式

HeadFirst中并没有把建造者模式(生成器模式)当做常用的设计模式来讲解,只是在附录中一带而过. 建造者模式的本质:       分离了对象组件的单独构造(由Builder来负责)和装配(由Director)来负责.从而可以构建出复杂的对象.这个模式适用于:某个对象的构建       过程复杂的情况先使用.由于实现了构建和装配的解耦.不同的构建器,相同的装配,也可以做出不同的对象相同的构建器不同的装配顺序也可以 做出不同的对象.也就是实现了构建算法.装配算法的解耦,实现了更好的复用. Dem

6.Java中的字符串

1.String的特性 特性一:不可变性 String s=new String("yangyun") s=s.toUpperCase(); 这里的s,s占用的空间是不一样的(地址不相同),前提是toUpperCase函数确实改变了原始s的内容. 为什么String是不可变对象?-----cankai 1.效率问题 如果你知道一个对象是不可变的,那么需要拷贝这个对象的内容时,就不用复制它的本身而只是复制它的地址,复制地址(通常一个指针的大小)需要很小的内存效率也很高. 2.安全性 不可

设计模式之建造者模式 Builder

本质与使用场景 public interface AirShipBuilder { Engine builderEngine(); OrbitalModule builderOrbitalModule(); EscapeTower builderEscapeTower(); } public class SxtAirShipBuilder implements AirShipBuilder{ //StringBuilder,以后学习XML解析中,JDOM库中的类:DomBuilder,SaxBu

学习之StringBuilder

1)此类表示值为可变字符序列的类似字符串的对象.之所以说值是可变的,是因为在通过追加.移除.替换或插入字符而创建它后可以对它进行修改.无法继承此类. 2)命名空间:System.Text     程序集:mscorlib(在 mscorlib.dll 中) 3)StringBuilder 的容量是实例在任何给定时间可存储的最大字符数,并且大于或等于实例值的字符串表示形式的长度.容量可通过Capacity 属性或EnsureCapacity 方法来增加          或减少,但它不能小于 Le

Java源码学习 -- java.lang.StringBuilder,java.lang.StringBuffer,java.lang.AbstractStringBuilder

一直以来,都是看到网上说“ StringBuilder是线程不安全的,但运行效率高:StringBuffer 是线程安全的,但运行效率低”,然后默默记住:一个是线程安全.一个线程不安全,但对内在原因并不了解.这两天终于下定决心看了下源代码,才深刻理解为啥一个线程安全.一个非线程安全. 一名话总结:java.lang.StringBuilder 与 java.lang.StringBuffer 同是继承于 java.lang.AbstractStringBuilder,具体在功能实现大多在 Abs

winform学习日志(二十九)----------根据标点符号分行,StringBuilder的使用;将字符串的每个字符颠倒输出,Reverse的使用

一:根据标点符号分行,上图,代码很简单 二:代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Lines { public partial class Fr

Java蒟蒻的学习之路——StringBuffer和StringBuilder类

String类型之前有过学习,但是发现了一个问题,就是String类型有个"隐形"的const,String的一些操作不能再源字符串中进行修改,必须要新建一个.但是StringBuffer和StingBuilder可以在源字符串中进行修改,StringBuffer支持多线程,但是在单线程中StringBuilder运行速度更快. 1 package javaLearning; 2 public class MainTest { 3 public static void main(Str

JavaSE入门学习29:Java常用类之StringBuffer类和StringBuilder类

一StringBuilder类 (1)认识StringBuilder类 在Java中,除了可以使用String类来存储字符串,还可以使用StringBuilder类或 StringBuffer类存储字符串,在需 要频繁对字符串进行修改操作时使用StringBuilder的效率比String要高. String 类具有是不可变性.如: 运行结果: 从运行结果中我们可以看到,程序运行时会额外创建一个对象,保存 "helloworld".当频繁操作字符串时,就会额 外产生很多临时变量.使用S