StringBuilder ,SubString哪种效率更高?欢迎讨论

fanciex 2005-06-09 05:36:41
这是我的代码被codeview时一位同事提出方案2,认为用stringbuilder效率会更高:大家给我分析分析 ,会不会?

一:
string display = siteObjectStr.Substring(8, 8));
if (display[display.Length - 1] == '\\')
{
display = display.Substring(0, display.Length - 1);
}
return display;

==============
二:
StringBuilder builder = new StringBuilder( siteObjectStr.Substring( 8, 8));
if (builder[builder.Length - 1] == '\\')
{
builder = builder.Remove(builder.Length - 1, 1);
}
return builder.ToString();
----------
...全文
752 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ivony 2005-06-10
  • 打赏
  • 举报
回复
纠正一下,我现在已经认为这种情况下第一种方案肯定比第二种方案效率高了。。。

看看第二种方案,不论你display[display.Length - 1] == '\\'是否成立,都会创建一个StringBuilder对象,最后还必须得再生成一个字符串对象。

可以去算算,如果display[display.Length - 1] == '\\'为真,就如同上面所说的,这个StringBuilder就执行了一个操作,效率不可能增加。

如果display[display.Length - 1] == '\\'为假,第一种方案就要比第二种方案快上几倍,直接返回字符串实例和把个字符串变成StringBuilder再ToString,猪都知道那样快。



楼上的说得对,任何问题都要具体情况具体分析,切不可教条主义,信口胡言。。。。
fanruinet 2005-06-10
  • 打赏
  • 举报
回复
Sorry! 没仔细看楼主的程序,原来就这么一个操作
StringBuilder的确只在大量字符串操作时才更高效
至于这个大量是多少,恐怕没有上面说的100万次,这个我测试过,做5-10个字符串连接用StringBuilder就比string快了。当然还与单个字符串的长度有关,不是绝对的。

楼主这种情况没啥好讨论的了,直接用string快一些
9sun888 2005-06-09
  • 打赏
  • 举报
回复
String类: String类在每次执行字符串操作时,都会创建一个新的string对象并要复制字符。所以影响了性能。
StringBuild类:解决了在对字符串进行重复修改的过程中会有大量对象被创建的问题。StringBuild类以Char为单位向字符串分配空间,所以操作中也许不需要进行额外的内存分配。但是StringBuild对象的创建比字符串对象的创建花费的时间要长!

所以结论是:对于几个字符串操作,比如字符串连接,不要使用StringBuild,因为创建StringBuild对象所耗费的系统开销将会超出连接带来的性能上的收益。对于大量的字符串操作,比如字符串连接,请使用StringBuild!这个大量是什么概念?我没有进行测试!我从书上获知100万次的字符串连接的测试用StringBuild快于String!
fanciex 2005-06-09
  • 打赏
  • 举报
回复
我当然知道stringBuilder效率高!
但在这例子中会高吗??????????
哪位说说会创建几次string:
例一:
string display = siteObjectStr.Substring(8, 8)); //一次
if (display[display.Length - 1] == '\\')
{
display = display.Substring(0, display.Length - 1);//一次
}
return display;
-----
例二:

StringBuilder builder = new StringBuilder( siteObjectStr.Substring( 8, 8));//一次
if (builder[builder.Length - 1] == '\\')
{
builder = builder.Remove(builder.Length - 1, 1);
}
return builder.ToString();//一次
还要创建stringbuilder实例,创建一个stringbuilder速度因该比创建string慢吧???

这不是多此一举吗?
我分析的对吗?????欢迎讨论?






tiaoci 2005-06-09
  • 打赏
  • 举报
回复
瞎扯吧,猪都知道这种情况下直接用string要快得多

创建一个StringBuilder对象要花多少时间啊

这世上就多那些狗屁只懂教条的人,就像你同事

我可不是瞎说的,写个例子大家运行一下就知道了

using System;
using System.Text;

public class Sample
{
public static string StripA(string s)
{
if(s[s.Length - 1] == '\\')
{
return s.Substring(0, s.Length - 1);
}
return s;
}

public static string StripB(string s)
{
StringBuilder b = new StringBuilder(s);
if (b[b.Length - 1] == '\\')
{
b = b.Remove(b.Length - 1, 1);
}
return b.ToString();
}
public static void Main(string [] args)
{
string path = "C:\\Documents and Settings\\";
Console.WriteLine(DateTime.Now);
for(int i = 0; i < 10000000; i++)
{
//StripA(path);
StripB(path);
}
Console.WriteLine(DateTime.Now);
}
}
凯龙 2005-06-09
  • 打赏
  • 举报
回复
只有较大处理时,才能看出效率。
否则两个差不多。
如果真的只有上面几句话的话,其实无所谓用哪种,因为都可以忽略不记。
如果是较大处理的话,请一定要使用StringBuilder。
科技互联人生 2005-06-09
  • 打赏
  • 举报
回复
用StringBuilder 或者String完全看你的场合

StringBuilder 操作不是很方便,但是效率很高,用于频繁的字符串的操作

String 比较常用和友好,在不是多次循环使用的时候,效率和StringBuilder 差异不是
很明显。

一般我是用String 滴~
MyLf 2005-06-09
  • 打赏
  • 举报
回复
当然是StringBuilder的效率高
注 builder.Remove(builder.Length - 1, 1);就可以了,因为它会修改当前实例,这不同于string
不用这样写:builder = builder.Remove(builder.Length - 1, 1);

Ivony 2005-06-09
  • 打赏
  • 举报
回复
二:
StringBuilder builder = new StringBuilder( siteObjectStr.Substring( 8, 8));
if (builder[builder.Length - 1] == '\\')
{
builder.Remove(builder.Length - 1, 1);//不需要再进行赋值,StringBuilder将对自己进行操作。
}
return builder.ToString();


实际上说实话,效率相差很小。

你这个StringBuilder既没放在循环里,又仅执行了一次操作,你自己去算算,首先创建StringBuilder就要把这个string拷贝一份,然后再创建一个StringBuilder的实例,最后还得创建一个新的string实例返回结果,估计效率还会有下降。。。。

把最开始的SubString也用StringBuilder可能会好些。。。。
freelyl 2005-06-09
  • 打赏
  • 举报
回复
StringBuilder速度是没话说的,只是操作麻烦,并不一定适合
fanruinet 2005-06-09
  • 打赏
  • 举报
回复
还有一篇
http://www.codeproject.com/dotnet/Strings.asp
fanruinet 2005-06-09
  • 打赏
  • 举报
回复
StringBuilder的确效率比string要高

http://www.codeproject.com/dotnet/StringsInDotNet.asp

110,560

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧