.net 中进行消耗时间计时

在项目中,经常要对某些方法的执行性能(消耗的时间)进行日志记录,有两种方案来实现。

StopWatch

使用Stopwatch类来量度时间非常简单。跟现实生活中的秒表一样,这个类的对象也能够对计数器进行开始、停止、归零(重置)操作,不过它可比一般的秒表精确多了,它能够精确到微秒(也就是百万分之一秒)。

(以下的示例来自于 http://www.cnblogs.com/greatandforever/archive/2008/07/23/1249185.html)

要演示Stopwatch的使用还是来段代码吧。下面是一个控制台应用程序,它将1到100万之间的所有整数累加:

using System;

namespace StopWatchClass
{
    class Program
    {
        static void Main(string[] args)
        {
            long total = 0;
            for (int i = 1; i <= 10000000; i++)
            {
                total += i;
            }
        }
    }
}

添加 Stopwatch 对象

Stopwatch类位于System.Diagnostics命名空间。下面是添加对象后的代码:

using System;
using System.Diagnostics;

namespace StopWatchClass
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch timer = new Stopwatch();
            long total = 0;
            for (int i = 1; i <= 10000000; i++)
            {
                total += i;
            }
        }
    }
}

控制 Stopwatch 对象

Stopwatch提供了几个方法用以控制Stopwatch对象。Start方法开始一个计时操作,Stop方法停止计时。此时如果第二次使用 Start方法,将继续计时,最终的计时结果为两次计时的累加。为避免这种情况,在第二次计时前用Reset方法将对象归零。这三个方法都不需要参数。代码是:

using System;
using System.Diagnostics;

namespace StopWatchClass
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch timer = new Stopwatch();
            long total = 0;
            timer.Start();
            for (int i = 1; i <= 10000000; i++)
            {
                total += i;
            }
            timer.Stop();
        }
    }
}

读取 Stopwatch 结果

在结束计时后下一步就是读取计时结果了。Stopwatch类提供了以下属性:

  • Elapsed:返回一个TimeSpan对象,表示计时时间间隔;
  • ElapsedMilliseconds:返回计时经过的微秒数,精确度稍差,适合于稍长一点的计时;
  • ElapsedTicks: 返回计时经过的计时器刻度(timer tick)数。计时器刻度是Stopwatch对象可能的最小量度单位。计时器刻度时间的长度由特定的计算机和操作系统确定。Stopwatch对象的 Frequency静态字段的值表示一秒所包含的计时器刻度数。注意它与TimeSpan的Ticks属性所用的时间单位的区别。

应当根据计时任务的情况选择其中的一个属性。在我们的示例程序中,Elapsed属性提供了需要的精确度,用它来输出经过的微秒数。这也是TimeSpan的最高精确度了。
下面是最终的程序代码:

using System;
using System.Diagnostics;

namespace StopWatchClass
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch timer = new Stopwatch();
            long total = 0;

            timer.Start();
            for (int i = 1; i <= 10000000; i++)
            {
                total += i;
            }

            timer.Stop();

            decimal micro = timer.Elapsed.Ticks / 10m;
            Console.WriteLine("Execution time was {0:F1} microseconds.", micro);
        }
    }
}

另外,使用IsRunning属性可以查看一个Stopwatch实例是否正在计时,使用StartNew方法可以开始一个新的计时器。

DateTime.Now.Ticks

使用 DateTime.Now.Ticks 可以得到当前时刻的毫微秒数。在执行方法前使用变量1存储当前毫微秒,执行方法后再用变量2存储当前毫微秒,则相应的时间差,转换为秒的话为:

时间间隔(秒) = (变量2 - 变量1) * 10000000d

原文地址:https://www.cnblogs.com/xiefang2008/p/9552137.html

时间: 2024-10-14 11:26:58

.net 中进行消耗时间计时的相关文章

ansible自动化部署之第三方模块添加(时间计时模块)

一.时间计时模块 ansible中可以加入一个计时模块在执行ansible-playbook时显示执行时长.方便使用. 1.配置方法 cd /etc/ansible mkdir callback_plugins cd callback_plugins wget https://raw.githubusercontent.com/jlafon/ansible-  \                     profile/master/callback_plugins/profile_tasks.

一道面试题:用多线程求1000以内的素数有多少个?并给出消耗时间

我曾经去一个公司面试,遇到这么一个题目:求1000以内的素数有多少个?用多线程实现,并给出消耗时间.我想了半天,没有想出多线程的解决方案.今天因为机缘到了,我浅谈下我的解法. 这道题,显然得考虑两个问题: 1.多线程的问题 2.算法性能问题 有人觉得1000以内还考虑什么算法性能?这肯定很快.但是话说回来,这个都有必要用多线程吗?如果我们求10000000以内的素数有多少个?是不是必须考虑以上两个问题了?多线程和算法优化的目的都是为了提高程序执行的效率.我们首先来考虑算法问题,什么是素数?素数:

对c语言系统库函数、堆排序、希尔排序、折半插入排序、快速排序消耗时间的比较

#include <stdio.h> #include <time.h> #define N 100000 /*库比较函数:qsort(int *base,int n,int struct_size,int (*compare)(const void *,const void *))中的比较函数*/ int compare(const void *first, const void *second) { if (*(int *)first > *(int *)second)/

Java中更精确的计时

我们一般的java运输计时代码是 1 long begintime = System.currentTimeMillis(); 2 3 //运算代码 4 5 long endtinme=System.currentTimeMillis(); 6 7 long costTime = (endtime - begintime); 但是,如果运算时间很短的时候,这个一个是现在机器太厉害,还有由于.currentTimeMillis()是1970年1月1日到现在的毫秒数,估计应该把很多小数位省略了,没看

linux中三个时间

mtime: modify time 修改时间,更改文件内容会修改时间. ctime: change time状态修改时间,更改属主及权限,文件名,大小,inode号 atime: access time访问时间 怎么查看文件的三个时间? stat filename 2.怎么使用这三个时间? find 中很多参数,其中就有关于这个的 -mmin n File's data was last modified n minutes ago.#文件的数据最后修改了N分钟前. -cmin n File'

FreeMarker中的日期时间处理

1. FreeMarker中的日期时间格式设置 FreeMarker中可以分别对date.time.datetime三种类型的日期时间设置格式,例如: config.setDateTimeFormat("yyyy-MM-dd HH:mm:ss"); config.setDateFormat("yyyy-MM-dd"); config.setTimeFormat("HH:mm:ss"); 当我们对一个页面变量使用 ?date ?time ?date

php 中date显示时间不对与Linux文件乱码问题

php 中date显示时间不对解决办法如下1.修改/etc/php.ini文件 在里头中找到data.timezone =去掉它前面的分号';' 然后设置data.timezone = "Asia/Shanghai";即可 2.在程序代码中使用函数date_default_timezone_set('Asia/Shanghai'); 或者date_default_timezone_set('PRC'); 即可 LINUX 系统显示中文文件乱码 解决办法如下 1.永久解决 输入local

在软件项目管理中如何把时间估算的靠近真实值?

我们在开发一个软件项目的时候,大老板或者客户经常需要我们给他们某个项目估算的工时,我们一般的做法就是把当前的项目按照WBS进行自上而下,自顶而底,自外而里的进行分解:然后根据一个详细的可个人实施的任务作为一个最低的估算时间的单元,这个时候问题,就来了,如何让这个最低的估算时间的单元逼近它的实际真实值,同时也不让员工太闲或者太累?这里给大家介绍一种我们以前用过的乐观估计,悲观估计和期望估计的算法,供大家参考. 任务最终的估算时间=(乐观估计+悲观估计+期望估计*4)/ 6(中庸), (1)乐观估计

vi 中插入当前时间

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<vi 中插入当前时间>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=661 前言 最近在写文档,需要频繁的插入当前的日期与时间. 所以想让v