三种计算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();
}
}
}

三种计算c#程序运行时间的方法的更多相关文章

  1. 两种计算Java对象大小的方法

    之前想研究一下unsafe类,碰巧在网上看到了这篇文章,觉得写得很好,就转载过来.原文出处是: http://blog.csdn.net/iter_zc/article/details/4182271 ...

  2. [转]SQL三种获取自增长的ID方法

     最新更新请访问: http://denghejun.github.io   SQL SERVER中的三种获得自增长ID的方法  这个功能比较常用,所以记下来以防自己忘掉. SCOPE_IDENTIT ...

  3. 三种dedecms调用相关文章的方法

    在文章的末尾或侧边栏添加相关文章可以提高用户的黏度,提高pv,增加se的好印象(哈哈),那么dedecms如何调用相关文章呢?有三种方法可以实现. 第一种dedecms调用相关文章的方法,用默认的li ...

  4. MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法

    在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应 ...

  5. 三种将list转换为map的方法(传统方法、jdk8 Stream流、guava)

    三种将list转换为map的方法 - jackyrong - ITeye博客:http://jackyrong.iteye.com/blog/2158009

  6. 对tableView三种计算动态行高方法的分析

    tableView是一个神奇的东西,可以这么说,就算是一个初学者如果能把tableView玩的很6,那编一般的iOS的需求都问题不大了.tableView是日常开发中用烂了的控件,但是关于tableV ...

  7. 旧书重温:0day2【2】 实验:三种获取kernel32.dll基址的方法

    0x01 找kernel32基地址的方法一般有三种: 暴力搜索法.异常处理链表搜索法.PEB法. 0x02 基本原理 暴力搜索法是最早的动态查找kernel32基地址的方法.它的原理是几乎所有的win ...

  8. Win10计算器在哪里?三种可以打开Win10计算器的方法图文介绍

    全新的windows10系统带来了不少新的特性和改变,其中win10的计算器位置就发生了很多的变化,导致很多网友们都以为win10计算器不见了,那么,win10计算器在哪里?如何打开?针对此问题,本文 ...

  9. 三种实现PHP伪静态页面的方法(转)

    PHP伪静态写法--其一 伪静态又名:URL重写 以下列举了三种方法. 方法一: 比如这个网页 http://www.2cto.com /soft.php/1,100,8630.html 其实处理的脚 ...

随机推荐

  1. JavaScript数组遍历(迭代)方法 8种

    最近工作中经常涉及到数据的处理,数组尤其常见,经常需要对其进行遍历.转换操作,网上的文章零零散散,不得已自己又找出红宝书来翻出来看,顺便记一笔,便于以后查询. 数组常用的方法 ECMAScript5为 ...

  2. RabbitMQ --- Work Queues(工作队列)

    目录 RabbitMQ --- Hello Mr.Tua 前言 Work Queues 即工作队列,它表示一个 Producer 对应多个 Consumer,包括两种分发模式:轮循分发(Round-r ...

  3. HTML中的target标记

    HTML:target=_blank -- 在新窗口中打开链接 _parent -- 在父窗体中打开链接 _self -- 在当前窗体打开链接,此为默认值 _top -- 在当前窗体打开链接,并替换当 ...

  4. 采药 NOIP 2005 普及组

    题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...

  5. Code:Blocks中文输出乱码解决方法

    0x01 问题描述 将CB的编码格式设置为UTF-8之后,在CMD窗口输出中文乱码. 0x02 解决办法 控制台显示的时候缺省的是使用系统默认的字符集,比如windows下用的是GBk,但是默认情况下 ...

  6. 验证码的Java实现--jsp

    <%@ page language="java" pageEncoding="UTF-8" %> <%@ page contentType=& ...

  7. Oracle进程与系统进程

    --Oracle进程与系统进程 --------------------------2013/11/25 这里讨论Linux/Unix环境下,oracle v$process与操作系统对应的关系. 系 ...

  8. python练习题一

    1.使用while循环输出1 2 3 4 5 6     8 9 10 答:i=0 while i<10:     i += 1     if i!=7:         print(i) 2. ...

  9. [H5]range对象的setStart/setEnd方法

    1.setStart:表示某个节点的range对象的起点位置;2.setEnd:表示某个节点的range对象的结束位置; 示例如下:<body> <div id="div& ...

  10. c#Reverse字符串

    class Program { static void Main(string[] args) { // 输出 ypoc si yek eht string str = "the key i ...