三种计算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 @   caimagic  阅读(16564)  评论(1编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示