为什么StringBuilder比string效率高
2007-09-19 11:18
453 查看
我们先看一个例子
strings1="orange";
strings2="red";
s1+=s2;
System.Console.WriteLine(s1);//outputs"orangered"
s1=s1.Substring(2,5);
System.Console.WriteLine(s1);//outputs"anger"
大家都知道字符串对象是“不可变的”,
对字符串进行操作的方法实际上返回的是新的字符串对象。
在前面的示例中,将
大量的字符串相加的时候就会有很多想s1一样的不在被引用,从而造成资源的极大浪费.
我们在看看StringBuilder是如何处理这样的问题.
System.Text.StringBuildersb=newSystem.Text.StringBuilder();
sb.Append("one");
sb.Append("two");
sb.Append("three");
stringstr=sb.ToString();
Append方法,Append里面到底是如何实现的呢.
publicStringBuilderAppend(stringvalue)
大家注意这点stringstringValue=this.m_StringValue;
[/code]
strings1="orange";
strings2="red";
s1+=s2;
System.Console.WriteLine(s1);//outputs"orangered"
s1=s1.Substring(2,5);
System.Console.WriteLine(s1);//outputs"anger"
大家都知道字符串对象是“不可变的”,
对字符串进行操作的方法实际上返回的是新的字符串对象。
在前面的示例中,将
s1和
s2的内容连接起来以构成一个字符串时,包含
"orange"和
"red"的两个字符串均保持不变。+=运算符会创建一个包含组合内容的新字符串。结果是
s1现在引用一个完全不同的字符串。只包含
"orange"的字符串仍然存在,但连接
s1后将不再被引用。
大量的字符串相加的时候就会有很多想s1一样的不在被引用,从而造成资源的极大浪费.
我们在看看StringBuilder是如何处理这样的问题.
System.Text.StringBuildersb=newSystem.Text.StringBuilder();
sb.Append("one");
sb.Append("two");
sb.Append("three");
stringstr=sb.ToString();
Append方法,Append里面到底是如何实现的呢.
publicStringBuilderAppend(stringvalue)
大家注意这点
internalvolatilestring m_StringValue ;
写到这里,需要有人见看到了volatile,也许不明白是什么意思,大概的说下.
volatile关键字实现了线程间数据同步,用volatile修饰后的变量不允许有不同于“主”内存区域的变量拷贝。
[code]换句话说,一个变量经volatile修饰后在所有线程中必须是同步的;任何线程中改变了它的值,所有其他线程立即
获取到了相同的值。理所当然的,volatile修饰的变量存取时比一般变量消耗的资源要多一点,因为线程有它自己的
变量拷贝更为高效。
this.NeedsAllocation(stringValue,requiredLength)
只有在需要的时候才去重新分配.
就分配空间和线程的使用上来讲,StringBuilder肯定比String要高,但是前提是使用频率比较高的情况下.
[/code]
相关文章推荐
- StringBuilder效率比String高的原因。
- C#基础——String和StringBuilder效率测试
- StringBuilder 与string 执行替换时的效率测试
- String.Format和StringBuilder的效率
- 11 为什么会有String,StringBuffer,StringBuilder及区别?耗时比较
- Java字符串处理String、StringBuilder、StringBuffer类效率分析
- C#的StringBuilder 以及string字符串拼接的效率对照
- Java学习札记14:一个比较String、StringBuffer和StringBuilder之间效率差别的简单例子
- 从为什么String=String谈到StringBuilder和StringBuffer
- 从为什么String=String谈到StringBuilder和StringBuffer
- java中String、StringBuilder和StringBuffer效率的比较
- String,StringBuffer,StringBuilder,StringWriter的效率差
- Java String为什么是不可变类,StringBuffer与StringBuilder区别
- string 和 stringBuilder在创建字符串的效率比较代码
- 为什么js拼接字符串StringBuilder效率那么高
- StringBuilder 的append 方法 和 String+ String的方法 效率分析
- String,StringBuffer,StringBuilder效率与内存占用比较
- Java字符串处理String、StringBuilder、StringBuffer类效率分析
- java中String+String与StringBuilder的append()方法的效率问题
- string , stringbuilder ,stringbuffer 效率对比