?????? 关于stringBuilder有个不懂的地方

leslielanyoung 2007-08-14 07:33:30
static void Main(string[] args)
{
//
// TODO: アプリケーションを開始するコードをここに追加してください。
//
string startString = "begin";
string s = "";
int count = 10000;

StringBuilder sb = new StringBuilder(startString);
DateTime startTime1 = DateTime.Now;
for(int i = 0;i<= count;i++)
{
sb.Append(s);
}
DateTime endTime1 = DateTime.Now;
//TimeSpan elapsedTime1 = endTime1-startTime1;
Console.WriteLine((endTime1-startTime1).ToString());


DateTime startTime2 = DateTime.Now;
for(int i = 0;i<=count;i++)
{
startString += s;
}
DateTime endTime2 = DateTime.Now;
//TimeSpan elapsedTime2 = endTime2 - startTime2;
Console.WriteLine((endTime2-startTime2).ToString());
Console.ReadLine();

}

正常情况下,stringBuilder的处理字符串的速度应该比较快,当要追加的字符串 s 非空时,是正常的,处理的时间比较短,可是当 s 为空字符串时,结果恰好就反过来了,不明白为什么,难道和内存的分配有关系吗?
...全文
107 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cby1990 2007-08-14
  • 打赏
  • 举报
回复
如果string s = null;就不会了


public static string Concat(string str0, string str1)
{
if (IsNullOrEmpty(str0))
{
if (IsNullOrEmpty(str1))
{
return Empty;
}
return str1;
}
if (IsNullOrEmpty(str1))
{
return str0;
}
int length = str0.Length;
string dest = FastAllocateString(length + str1.Length);
FillStringChecked(dest, 0, str0);
FillStringChecked(dest, length, str1);
return dest;
}






public StringBuilder Append(string value)
{
if (value != null)
{
string stringValue = this.m_StringValue;
IntPtr currentThread = Thread.InternalGetCurrentThread();
if (this.m_currentThread != currentThread)
{
stringValue = string.GetStringForStringBuilder(stringValue, stringValue.Capacity);
}
int length = stringValue.Length;
int requiredLength = length + value.Length;
if (this.NeedsAllocation(stringValue, requiredLength))
{
string newString = this.GetNewString(stringValue, requiredLength);
newString.AppendInPlace(value, length);
this.ReplaceString(currentThread, newString);
}
else
{
stringValue.AppendInPlace(value, length);
this.ReplaceString(currentThread, stringValue);
}
}
return this;
}




cby1990 2007-08-14
  • 打赏
  • 举报
回复
日文。。汗一个

110,561

社区成员

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

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

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