您的位置:首页 > 产品设计 > UI/UE

StringBuilder 与string 执行替换时的效率测试

2008-10-07 10:56 465 查看
测试代码如下:

StringBuilder strBuilder = new StringBuilder();

while (strBuilder.Length < 10000)

strBuilder.Append("声明:本源码及资源 (www.ssssss.com) 收集整理后提供下载");

string str = strBuilder.ToString();

DateTime s = DateTime.Now;

TimeSpan ts = DateTime.Now - s;

int i = 0, n = 50000;

s = DateTime.Now;

while (i++ < n)

//strBuilder = strBuilder.Replace("w", "a");

strBuilder.Replace("s", "后提供下载");

ts = DateTime.Now - s;

System.Diagnostics.Debug.WriteLine(string.Format("StringBuilder 替换{0}次/t 总计时间{1}毫秒", n, ts.TotalMilliseconds));

i = 0;

s = DateTime.Now;

while (i++ < n)

//str = str.Replace("w", "a");

str.Replace("s", "后提供下载");

ts = DateTime.Now - s;

System.Diagnostics.Debug.WriteLine(string.Format("string 替换{0}次/t 总计时间{1}毫秒" ,n, ts.TotalMilliseconds));

s = DateTime.Now;

上面结果输出

StringBuilder 替换50000次 总计时间5640.625毫秒
string 替换50000次 总计时间8609.375毫秒

而如果将第一次替换结果赋值给数据源后,即:

StringBuilder strBuilder = new StringBuilder();

while (strBuilder.Length < 10000)

strBuilder.Append("声明:本源码及资源 (www.ssssss.com) 收集整理后提供下载");

string str = strBuilder.ToString();

DateTime s = DateTime.Now;

TimeSpan ts = DateTime.Now - s;

int i = 0, n = 50000;

s = DateTime.Now;

while (i++ < n)

strBuilder = strBuilder.Replace("s", "后提供下载");

//strBuilder.Replace("s", "后提供下载");

ts = DateTime.Now - s;

System.Diagnostics.Debug.WriteLine(string.Format("StringBuilder 替换{0}次/t 总计时间{1}毫秒", n, ts.TotalMilliseconds));

i = 0;

s = DateTime.Now;

while (i++ < n)

str = str.Replace("s", "后提供下载");

//str.Replace("s", "后提供下载");

ts = DateTime.Now - s;

System.Diagnostics.Debug.WriteLine(string.Format("string 替换{0}次/t 总计时间{1}毫秒", n, ts.TotalMilliseconds));

s = DateTime.Now;

Console.WriteLine("end");

Console.ReadLine();

结果为:

StringBuilder 替换50000次 总计时间5640.625毫秒
string 替换50000次 总计时间3750毫秒

可以看出,如果搜索字符在字符串中包含大量时,StringBuilder 会比string 速度快,而如果检索字符串在源字符串中不包含或包含少量时string 速度快.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: