首先,非常感谢赵老大的CodeTimer,它让我们更好的了解到代码执行的性能,从而可以让我们从性能的角度来考虑问题,有些东西可能我们认为是这样的,但经理测试并非如何,这正应了我之前的那名话:“机器最能证明一切”!

费话就不说了,看代码吧:

  1     /// <summary>
2 /// 执行代码规范
3 /// </summary>
4 public interface IAction
5 {
6 void Action();
7 }
8
9 /// <summary>
10 /// 老赵的性能测试工具
11 /// </summary>
12 public static class CodeTimer
13 {
14 [DllImport("kernel32.dll", SetLastError = true)]
15 static extern bool GetThreadTimes(IntPtr hThread, out long lpCreationTime, out long lpExitTime, out long lpKernelTime, out long lpUserTime);
16
17 [DllImport("kernel32.dll")]
18 static extern IntPtr GetCurrentThread();
19 public delegate void ActionDelegate();
20 private static long GetCurrentThreadTimes()
21 {
22 long l;
23 long kernelTime, userTimer;
24 GetThreadTimes(GetCurrentThread(), out l, out l, out kernelTime, out userTimer);
25 return kernelTime + userTimer;
26 }
27 static CodeTimer()
28 {
29 Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
30 Thread.CurrentThread.Priority = ThreadPriority.Highest;
31 }
32 public static void Time(string name, int iteration, ActionDelegate action)
33 {
34 if (String.IsNullOrEmpty(name))
35 {
36 return;
37 }
38 if (action == null)
39 {
40 return;
41 }
42
43 //1. Print name
44 ConsoleColor currentForeColor = Console.ForegroundColor;
45 Console.ForegroundColor = ConsoleColor.Yellow;
46 Console.WriteLine(name);
47
48 // 2. Record the latest GC counts
49 //GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
50 GC.Collect(GC.MaxGeneration);
51 int[] gcCounts = new int[GC.MaxGeneration + 1];
52 for (int i = 0; i <= GC.MaxGeneration; i++)
53 {
54 gcCounts[i] = GC.CollectionCount(i);
55 }
56
57 // 3. Run action
58 Stopwatch watch = new Stopwatch();
59 watch.Start();
60 long ticksFst = GetCurrentThreadTimes(); //100 nanosecond one tick
61 for (int i = 0; i < iteration; i++) action();
62 long ticks = GetCurrentThreadTimes() - ticksFst;
63 watch.Stop();
64
65 // 4. Print CPU
66 Console.ForegroundColor = currentForeColor;
67 Console.WriteLine("\tTime Elapsed:\t\t" +
68 watch.ElapsedMilliseconds.ToString("N0") + "ms");
69 Console.WriteLine("\tTime Elapsed (one time):" +
70 (watch.ElapsedMilliseconds / iteration).ToString("N0") + "ms");
71 Console.WriteLine("\tCPU time:\t\t" + (ticks * 100).ToString("N0")
72 + "ns");
73 Console.WriteLine("\tCPU time (one time):\t" + (ticks * 100 /
74 iteration).ToString("N0") + "ns");
75
76 // 5. Print GC
77 for (int i = 0; i <= GC.MaxGeneration; i++)
78 {
79 int count = GC.CollectionCount(i) - gcCounts[i];
80 Console.WriteLine("\tGen " + i + ": \t\t\t" + count);
81 }
82 Console.WriteLine();
83 }
84
85
86
87 public static void Time(string name, int iteration, IAction action)
88 {
89 if (String.IsNullOrEmpty(name))
90 {
91 return;
92 }
93
94 if (action == null)
95 {
96 return;
97 }
98
99 //1. Print name
100 ConsoleColor currentForeColor = Console.ForegroundColor;
101 Console.ForegroundColor = ConsoleColor.Yellow;
102 Console.WriteLine(name);
103
104 // 2. Record the latest GC counts
105 //GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
106 GC.Collect(GC.MaxGeneration);
107 int[] gcCounts = new int[GC.MaxGeneration + 1];
108 for (int i = 0; i <= GC.MaxGeneration; i++)
109 {
110 gcCounts[i] = GC.CollectionCount(i);
111 }
112
113 // 3. Run action
114 Stopwatch watch = new Stopwatch();
115 watch.Start();
116 long ticksFst = GetCurrentThreadTimes(); //100 nanosecond one tick
117 for (int i = 0; i < iteration; i++) action.Action();
118 long ticks = GetCurrentThreadTimes() - ticksFst;
119 watch.Stop();
120
121 // 4. Print CPU
122 Console.ForegroundColor = currentForeColor;
123 Console.WriteLine("\tTime Elapsed:\t\t" +
124 watch.ElapsedMilliseconds.ToString("N0") + "ms");
125 Console.WriteLine("\tTime Elapsed (one time):" +
126 (watch.ElapsedMilliseconds / iteration).ToString("N0") + "ms");
127 Console.WriteLine("\tCPU time:\t\t" + (ticks * 100).ToString("N0")
128 + "ns");
129 Console.WriteLine("\tCPU time (one time):\t" + (ticks * 100 /
130 iteration).ToString("N0") + "ns");
131
132 // 5. Print GC
133 for (int i = 0; i <= GC.MaxGeneration; i++)
134 {
135 int count = GC.CollectionCount(i) - gcCounts[i];
136 Console.WriteLine("\tGen " + i + ": \t\t\t" + count);
137 }
138 Console.WriteLine();
139 }
140 }

有了上面的codeTimer我们就来测试一个吧,如字条串和并的问题,用+=还是用StringBuilder呢,有点经验的程序员肯定说是StringBuilder,是的,确实是后者,那我们就来看看这

两种方法测试的结果吧

 1      CodeTimer.Time("String  Concat", 100000,
2 () =>
3 {
4 var s = "1";
5 for (int i = 1; i < 10; i++)
6 s = s + "1";
7 });
8
9 CodeTimer.Time("StringBuilder Concat", 100000,
10 () =>
11 {
12 var s = new StringBuilder();
13 for (int i = 1; i < 10; i++)
14 s.Append("1");
15 });

测试的结果如下:

aaarticlea/png;base64,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" alt="" />

从图中我们可以看到StringBuilder快的很明显,无论是执行时间,还是对CPU的消耗及GC回收都远低于String的拼结,所以,才有以下结论:

在字符串拼结时,请使用StringBuilder吧!

将不确定变为确定~老赵写的CodeTimer是代码性能测试的利器的更多相关文章

  1. 根据老赵轻量级Actor进行修改的Actor模型

    学习了老赵轻量级Actor模型,并在实际中使用,效果不错. 老赵轻量级Actor模型: ActorLite:一个轻量级Actor模型实现(上) ActorLite:一个轻量级Actor模型实现(中) ...

  2. 老赵点滴地址:http://blog.zhaojie.me/2009/05/a-simple-actor-model-implementation.html

    老赵点滴地址:http://blog.zhaojie.me/2009/05/a-simple-actor-model-implementation.html

  3. python实现统计你一共写了多少行代码

    程序员要保证一定的代码量就必须勤奋的敲代码,但怎么知道自己一共写了多少代码呢,笔者用python写了个简单的脚本,遍历所有的.java,.cpp,.c文件的行数,但是正如大家所知,java生成了许多代 ...

  4. 如何写出无法维护的代码(JAVA版)

    程序命名(针对那些不能混淆的代码) 容易输入的名字.比如:Fred,asdf 单字母的变量名.比如:a,b,c, x,y,z,或者干脆上中文比如(阿隆索肯德基) 有创意地拼写错误.比如:SetPint ...

  5. 写出优质Java代码的4个技巧

    我们平时的编程任务不外乎就是将相同的技术套件应用到不同的项目中去,对于大多数情况来说,这些技术都是可以满足目标的.然而,有的项目可能需要用到一些特别的技术,因此工程师们得深入研究,去寻找那些最简单但最 ...

  6. 写出优质Java代码的4个技巧(转)

    http://geek.csdn.net/news/detail/238243 原文:4 More Techniques for Writing Better Java 作者:Justin Alban ...

  7. 用bochs调试自己写的系统引导代码

    1 安装和配置bochs 首先从bochs.sourceforge.net里面把BOCHS给download下来,鉴于Windows的普及,仅仅谈BOCHS在win下的使用方法,其实在其它的OS中方法 ...

  8. 你写的什么垃圾代码让Vsync命令不能及时处理呢?(1)

    想想自己写的什么垃圾代码导致Vsync不能及时处理#(不高兴) 想不开? 实际开发中性能问题不好复现?这你就可能需要一些工具来帮你检测这种情况. 首先是Android系统自带的工具(4.1之后的版本) ...

  9. Linux Kernel文件系统写I/O流程代码分析(二)bdi_writeback

    Linux Kernel文件系统写I/O流程代码分析(二)bdi_writeback 上一篇# Linux Kernel文件系统写I/O流程代码分析(一),我们看到Buffered IO,写操作写入到 ...

随机推荐

  1. 常见bat(批处理)命令的语法规则

    最近由于在做cocos2d的项目,需要用到一些bat命令,在此做些记录. bat命令用txt文本编辑就行,编辑完之后将后缀名改为bat即可运行.先来一个最简单的例子: @echo off echo \ ...

  2. modal 移除遮盖层

    弹框关闭时 移除遮盖层 $("#modal").bind('hide.bs.modal',function(){ $(".modal-backdrop").re ...

  3. Python_day6

    Δ汉诺塔例子 # 定义三个全局的列表 la = [] lb = [] lc = [] stepn = 0 def create_hano(n): '''构建由n个圆盘组成的汉诺塔''' global ...

  4. w7 全网架构-rsync-备份

    准备 1.从安装系统开始准备 安装过程中添加网卡 eth0 ip 10.0.0.210 netmask 24 gateway 10.0.0.254 eth1 ip 172.16.1.210 netma ...

  5. 【转】comparable Interface

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.什么是Comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 , ...

  6. 去掉input[type="number"]的默认样式

    input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{ -webkit-appearance: none !importa ...

  7. day15_雷神_前端03

    # 前端 day03 内容回顾 javascript: 1.ECMAScript5.0 es6(阮一峰) es7 es8 (1)声明变量 var let (2)内置函数 Date Math.rando ...

  8. [Linux/Ubuntu] vi/vim 使用方法讲解

    vi/vim 基本使用方法 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的 ...

  9. 优化版小程序canvas,增加失败逻辑,及完善文字

    wxml <view class="shareBox" style="backgound:{{isShow ? '#000' : '#fff'}}" wx ...

  10. blender 快捷键手动整理

    armature envelop 设置骨骼影响范围:Edit Mode 下,选中骨头的其中一端,按 Alt + s,缩放 T 呼出 Tools N 呼出 Property Ctrl + Alt + Q ...