测试代码如下:
- 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 速度快.