C#计算一段程序运行时间的三种方法

直接代码:
第一种方法利用System.DateTime.Now

  1. static void SubTest()  
  2. {  
  3.     DateTime beforDT = System.DateTime.Now;    
  4.   
  5.     //耗时巨大的代码  
  6.       
  7.     DateTime afterDT = System.DateTime.Now;  
  8.     TimeSpan ts = afterDT.Subtract(beforDT);  
  9.     Console.WriteLine("DateTime总共花费{0}ms.", ts.TotalMilliseconds);  
  10. }  
复制代码
 1         public static void SubTest()
 2         {
 3             DateTime beforeDT = System.DateTime.Now;
 4             int[] a = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
 5             //Shuffle(a) is the function you want to test.
 6             Shuffle(a);
 7             DateTime afterDT = System.DateTime.Now;
 8             TimeSpan ts = afterDT.Subtract(beforeDT);
 9             Console.WriteLine("DateTime costed for Shuffle function is: {0}ms",ts.TotalMilliseconds);
10         }
复制代码

第二种用Stopwatch类(System.Diagnostics)

复制代码
 1         public static void SubTest()
 2         {
 3             Stopwatch sw = new Stopwatch();
 4             sw.Start();
 5             //Shuffle(a) is the function you want to test.
 6             int[] a = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
 7             Shuffle(a);
 8             sw.Stop();
 9             TimeSpan ts = sw.Elapsed;
10             Console.WriteLine("DateTime costed for Shuffle function is: {0}ms", ts.TotalMilliseconds);
11         }
复制代码

 

第三种用API实现:个人感觉以秒为单位来计算程序耗时,数量级有点大了,还是推荐前面两种毫秒级别的……
  1. [System.Runtime.InteropServices.DllImport("Kernel32.dll")]  
  2. static extern bool QueryPerformanceCounter(ref long count);  
  3. [System.Runtime.InteropServices.DllImport("Kernel32.dll")]  
  4. static extern bool QueryPerformanceFrequency(ref long count);     
  5. static void SubTest()  
  6. {  
  7.     long count = 0;  
  8.     long count1 = 0;  
  9.     long freq = 0;  
  10.     double result = 0;  
  11.     QueryPerformanceFrequency(ref freq);  
  12.     QueryPerformanceCounter(ref count);     
  13.   
  14.     //耗时巨大的代码  
  15.       
  16.     QueryPerformanceCounter(ref count1);  
  17.     count = count1 - count;  
  18.     result = (double)(count) / (double)freq;  
  19.     Console.WriteLine("QueryPerformanceCounter耗时: {0} 秒", result);  
  20. }  

复制代码
 1         [System.Runtime.InteropServices.DllImport("Kernel32.dll")]
 2         static extern bool QueryPerformanceCounter(ref long count);
 3         [System.Runtime.InteropServices.DllImport("Kernel32.dll")]
 4         static extern bool QueryPerformanceFrequency(ref long count);  
 5         public static void SubTest()
 6         {
 7             long count = 0;
 8             long count1 = 0;
 9             long freq = 0;
10             double result = 0;
11             QueryPerformanceFrequency(ref freq);
12             QueryPerformanceCounter(ref count);
13             //Shuffle(a) is the function you want to test.
14             int[] a = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
15             Shuffle(a);
16             QueryPerformanceCounter(ref count1);
17             count = count1 - count;
18             result = (double)(count) / (double)freq;
19             //Note:The result is counted by second.
20             Console.WriteLine("DateTime costed for Shuffle function is: {0} s", result);
21         }
posted @ 2019-10-15 10:25  惊蛰-  阅读(3566)  评论(0编辑  收藏  举报