将不确定变为确定~老赵写的CodeTimer是代码性能测试的利器

时间:2023-03-08 17:02:03

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

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

将不确定变为确定~老赵写的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是代码性能测试的利器

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

两种方法测试的结果吧

将不确定变为确定~老赵写的CodeTimer是代码性能测试的利器
 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 });
将不确定变为确定~老赵写的CodeTimer是代码性能测试的利器

测试的结果如下:

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

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

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