三种计算c#程序运行时间的方法

三种计算c#程序运行时间的方法
第一种
利用 **System.DateTime.Now **

// example1: System.DateTime.Now method
DateTime dt1 = System.DateTime.Now;
System.Threading.Thread.Sleep(time_cap);
DateTime dt2 = System.DateTime.Now;

TimeSpan ts = dt2.Subtract(dt1);
Console.WriteLine("example1 time {0}", ts.TotalMilliseconds);

第二种
利用Stopwatch

// example2: Stopwatch class
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
System.Threading.Thread.Sleep(time_cap);
sw.Stop();

TimeSpan ts2 = sw.Elapsed;
Console.WriteLine("example2 time {0}", ts2.TotalMilliseconds);

第三种
利用c++ API

// example3: c++ API
long count1 = 0;
long count2 = 0;
long freq = 0;
double result = 0;

QueryPerformanceFrequency(ref freq);
QueryPerformanceCounter(ref count1);
System.Threading.Thread.Sleep(time_cap);
QueryPerformanceCounter(ref count2);

result = (double)(count2 - count1) / (double)freq;
Console.WriteLine("example3 time {0}", result);

测试结果:
example1 time 2001.486
example2 time 2000.6587
example3 time 2.00032488719712

二三两种方法结果比较准确

完整代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication
{
    class Program
    {
        [System.Runtime.InteropServices.DllImport("Kernel32.dll")]
        static extern bool QueryPerformanceFrequency(ref long count);

        [System.Runtime.InteropServices.DllImport("Kernel32.dll")]
        static extern bool QueryPerformanceCounter(ref long count);

        static void Main(string[] args)
        {
            int time_cap = 2000;

            // example1: System.DateTime.Now method
            DateTime dt1 = System.DateTime.Now;
            System.Threading.Thread.Sleep(time_cap);
            DateTime dt2 = System.DateTime.Now;

            TimeSpan ts = dt2.Subtract(dt1);
            Console.WriteLine("example1 time {0}", ts.TotalMilliseconds);

            // example2: Stopwatch class
            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            sw.Start();
            System.Threading.Thread.Sleep(time_cap);
            sw.Stop();

            TimeSpan ts2 = sw.Elapsed;
            Console.WriteLine("example2 time {0}", ts2.TotalMilliseconds);

            // example3: c++ API
            long count1 = 0;
            long count2 = 0;
            long freq = 0;
            double result = 0;

            QueryPerformanceFrequency(ref freq);
            QueryPerformanceCounter(ref count1);
            System.Threading.Thread.Sleep(time_cap);
            QueryPerformanceCounter(ref count2);

            result = (double)(count2 - count1) / (double)freq;
            Console.WriteLine("example3 time {0}", result);

            Console.ReadLine();
        }
    }
}
posted @ 2016-10-20 18:32  caimagic  阅读(16563)  评论(1编辑  收藏  举报