String+ String.Concat String.Format StringBuilder 之间的性能测试
找到一篇国外的代码,专门来测试这个,
String+
String.Concat
String.Format
StringBuilder
前三个在100个左右字符串差不多,
String.Concat会获得稍微好一点点的性能提高,
String.Format会让你使用起来更方便,
StringBuilder更适合更多更长的字符串拼接,
如果有其它见解,还请指导。
using System;
using System.Diagnostics;
using System.Text;
namespace CompareInstructionExecutionSpeed
{
public delegate void CompareExcecutionSpeed(int loop);
class Program
{
public static string ResultConcatenation = string.Empty;
public static readonly StringBuilder Sb = new StringBuilder();
public static readonly Stopwatch Stopwatch = new Stopwatch(); public static void Main()
{
CompareExcecutionSpeed methods = StringBuilderExecutionSpeed;
methods += StringConcatExecutionSpeed;
methods += ManualConcatenationExecutionSpeed;
methods += StringFormatExecutionSpeed;
//methods+=Some Method -- you can add your method to calculate speed. methods.Invoke();//count Console.ReadKey();
} //Elapsing StringBuilder -------------------------------------------
public static void StringBuilderExecutionSpeed(int loop)
{
Stopwatch.Restart();
for (int i = ; i < loop; i++)
{
ShowPercentProgress(i, loop);
Sb.Append(" str");
Sb.AppendLine(i.ToString());
}
Stopwatch.Stop();
ShowCompareResult("StringBuilder", Stopwatch);
} //Elapsing Str1+Str2+... -------------------------------------------
public static void ManualConcatenationExecutionSpeed(int loop)
{
Stopwatch.Restart();
for (int i = ; i < loop; i++)
{
ShowPercentProgress(i, loop);
ResultConcatenation += " str" + i + "\n";
}
Stopwatch.Stop();
ShowCompareResult("str1+str2+...", Stopwatch);
} //Elapsing String.Concat -------------------------------------------
public static void StringConcatExecutionSpeed(int loop)
{
Stopwatch.Restart();
for (int i = ; i < loop; i++)
{
ShowPercentProgress(i, loop);
ResultConcatenation += string.Concat(" str", i, "\n");
}
Stopwatch.Stop();
ShowCompareResult("String.Concat", Stopwatch); } //Elapsing String.Format -------------------------------------------
public static void StringFormatExecutionSpeed(int loop)
{
Stopwatch.Restart();
for (int i = ; i < loop; i++)
{
ShowPercentProgress(i, loop);
ResultConcatenation += string.Format(" str{0}\n", i);
}
Stopwatch.Stop();
ShowCompareResult("String.Format", Stopwatch);
} //Show Compare Result---------------------------------------------
public static void ShowCompareResult(string message, Stopwatch stopwatch)
{
Console.ResetColor();
Console.WriteLine("\r{0}\t{1,9} Millisecond ~={2,3} second ~={3,3} minutes",
message,
Math.Round(stopwatch.Elapsed.TotalMilliseconds),
Math.Round(stopwatch.Elapsed.TotalSeconds),
Math.Round(stopwatch.Elapsed.TotalMinutes));
} //Show processing progress----------------------------------------
static void ShowPercentProgress(int currElementIndex, int totalElementCount)
{
Console.ForegroundColor = ConsoleColor.Green;
int percent = ( * (currElementIndex + )) / totalElementCount;
Console.Write("\r{0}%", percent);
}
}
}
String+ String.Concat String.Format StringBuilder 之间的性能测试的更多相关文章
- String、StringBuffer与StringBuilder之间区别[全屏看文]
String.StringBuffer与StringBuilder之间区别[全屏看文] 最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,S ...
- String、StringBuffer、StringBuilder之间区别
String,StringBuffer,StringBuilder 之间区别 在字符串处理中C#提供了String.StringBuffer.StringBuilder三个类.那么他们到底有什么优缺点 ...
- String、StringBuffer与StringBuilder之间区别(转)
原文链接:String.StringBuffer与StringBuilder之间区别 最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,Stri ...
- 自己(转)String、StringBuffer与StringBuilder之间区别
String.StringBuffer与StringBuilder之间区别 最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringB ...
- (转)String、StringBuffer与StringBuilder之间区别
原文地址: http://www.cnblogs.com/A_ming/archive/2010/04/13/1711395.html 关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺 ...
- String、StringBuffer、StringBuilder之间的区别
String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) ...
- java中String,StringBuffer,StringBuilder之间的区别
文章转载自:http://www.cnblogs.com/frankliiu-java/archive/2010/07/05/1771537.html String是固定长度的字符串,如果要发生变化必 ...
- Java中String、StringBuffer和StringBuilder之间的区别
String在Java中是字符串常量 例如 String str = "abc"; str = str + 1; System.out.println(str); 结果将是abc1 ...
- String、Stringbuffer和Stringbuilder之间的区别
关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下 1.在执行速度方面:Stringbuilder>Stringbuffer&g ...
随机推荐
- Tomcat session集群
author:JevonWei 版权声明:原创作品 环境 tomcatA 172.16.253.108 tomcatB 172.16.253.105 代理服务器 172.16.253.191 Tomc ...
- Thinkphp3.2.3框架下封装公共的函数,例如封装CURL函数来获取接口数据
当我们需要在控制层调用相同的封装函数时,写多次相同的函数,显得代码十分的拉杂,不精简: TP框架有一个很好的机制,可以再Common定义一个function.php函数,当我们在控制层调用的时候直接调 ...
- 最常见的三个排序(冒泡、直接插入、快速)的JS实现
//冒泡排序function bubble(arr){ for(var i=0;i<arr.length;i++){ for(var j=0;j<arr.length-i;j++){ if ...
- 深入剖析ConcurrentHashMap二
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt200 我们关注的操作有:get,put,remove 这3个操作.对于哈希表 ...
- quartz源码分析——执行引擎和线程模型
title: quartz源码分析--执行引擎和线程模型 date: 2017-09-09 23:14:48 categories: quartz tags: [quartz, 源码分析] --- - ...
- 转:【Java集合源码剖析】Java集合框架
转载轻注明出处:http://blog.csdn.net/ns_code/article/details/35564663 Java集合工具包位于Java.util包下,包含了很多常用的数据结构, ...
- 微信小程序icon,text,progress标签的测试
一:testIconAndTextAndProgress.wxml的代码如下.testIconAndTextAndProgress.js自动生成示例代码 //testIconAndTextAndPro ...
- 201521123091 《Java程序设计》第4周学习总结
Java 第二周总结 第四周的作业. 目录 1.本章学习总结 2.Java Q&A 3.使用码云管理Java代码 4.PTA实验 1.本章学习总结 1.1 尝试使用思维导图总结有关继承的知识点 ...
- 201521123015 《Java程序设计》第4周学习总结
本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 1.多态:使用单一接口操作多种类型的对象. 2.private修饰属性,public修饰方法. 3 ...
- 201521123093 java 第一周总结
201521123093 <Java程序设计> 第一周学习总结 1.本周学习总结 (1)第一次开始接触java语言,java的用法和C不太一样.在编程序时语句比以前的长. (2)学会了使用 ...