统计代码执行时间,使用Stopwatch和UserProcessorTime的区别
当我们需要统计一段代码的执行时间,首先想到的可能是Stopwatch类。在这里,先暂不使用Stopwatch,自定义一个统计代码执行时间的类,大致需要考虑到:
1、确保统计的是当前进程、当前线程中代码的执行时间。
2、在统计执行过程中,不允许有垃圾回收。即在统计代码执行时间之前,就让GC完成垃圾回收。
举例:统计显示一个数组元素所消耗的时间
class Program{static void Main(string[] args){int[] arrs = new int[10000];BuildArray(arrs);CalculateTiming calculateTiming = new CalculateTiming();calculateTiming.Start();DisplaySomeDigits(arrs);calculateTiming.Stop();Console.WriteLine("所耗费时间为:" + calculateTiming.Result().TotalMilliseconds + "毫秒");}//显示数组元素static void DisplaySomeDigits(int[] arr){for (int i = 0; i < arr.Length; i++){Console.Write(arr[i] + " ");}}//创建数组static void BuildArray(int[] arr){for (int i = 0; i < arr.Length; i++){arr[i] = i;}}}/// <summary>/// 计算CPU消耗时间/// </summary>public class CalculateTiming{private TimeSpan startTime;private TimeSpan duration;public CalculateTiming(){startTime = new TimeSpan(0);duration = new TimeSpan(0);}public void Start(){//手动执行垃圾回收GC.Collect();//挂起当前线程,直到使用GC对所有托管堆上的对象实施Finalize方法GC.WaitForPendingFinalizers();//获取当前进程、当前线程执行的起始时间startTime = Process.GetCurrentProcess().Threads[0].UserProcessorTime;}public void Stop(){//获取当前进程、当前线程执行所消耗的时间duration = Process.GetCurrentProcess().Threads[0].UserProcessorTime.Subtract(startTime);}public TimeSpan Result(){return duration;}}

以上,通过当前进程、当前线程的UserProcessorTime属性来统计代码执行时间。
如果使用Stopwatch来统计代码执行时间。
static void Main(string[] args){int[] arrs = new int[10000];BuildArray(arrs);Stopwatch sw = new Stopwatch();sw.Start();DisplaySomeDigits(arrs);sw.Stop();Console.WriteLine("所耗费时间为:" + sw.ElapsedMilliseconds + "毫秒");}

为什么使用Stopwatch统计代码执行时间,耗费时间更长呢?
--使用UserProcessorTime属性来统计,统计的是当前进程、当前线程所消耗的CPU执行时间。而Stopwatch统计的代码执行时间,不仅包括了CPU的执行时间,还包括了在电脑屏幕上显示字符串所占用的I/0时间。
统计代码执行时间,使用Stopwatch和UserProcessorTime的区别的更多相关文章
- 监测代码执行时间之Stopwatch
var sw = new System.Diagnostics.Stopwatch(); sw.Start(); 中间为要执行的代码 sw.Stop(); var msg = "上面操作耗时 ...
- CodeIgniter(3.1.4)框架中添加执行时间统计代码
CodeIgniter(3.1.4)框架中添加,执行时间统计代码: system/core/CodeIgniter.php最后行处. /* * ---------------------------- ...
- C# 统计程序执行时间
随便写写,小马哥勿怪 最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷. 话说马云年轻的时候也是屌丝一枚,有图为证 现 ...
- 一个简单的任务执行时间监视器 StopWatch
有时我们在做开发的时候需要记录每个任务执行时间,或者记录一段代码执行时间,最简单的方法就是打印当前时间与执行完时间的差值,然后这样如果执行大量测试的话就很麻烦,并且不直观, 如果想对执行的时间做进一步 ...
- VS2010统计代码行数 [转]
按CTRL+SHIFT+F (Find in files),勾上支持正则表达式,然后输入搜索内容: ^:b*[^:b#/]+.*$ 以上表达式的统计可做到:#开头 和 /开头 或者 空行 都不计入代 ...
- Eclipse统计代码行数
开发过程中,经常需要统计代码行数,这时可以通过Eclipse的Search功能来实现. 步骤: 1.在Package Explorer中选中需要统计的包: 2.单击菜单Search-->File ...
- Google Analytics统计代码GA.JS中文教程
2010-12-06 11:07:08| 分类: java编程 | 标签:google analytics ga js 代码 |举报|字号 订阅 Google Analytics ...
- Visual Studio VS2010统计代码行数(转载)
本文转自:http://blog.csdn.net/zhouworld16/article/details/9292851 在网上看到别人用的方法: 按CTRL+SHIFT+F (Find in fi ...
- php 获取代码执行时间和消耗的内存
做一些php性能测试的时候,要获取代码执行时间和消耗的内存,查了一下资料,发现php有自带的函数可以实现这个功能,具体实现代码如下: $t1 = microtime(true);// ... 执行代码 ...
随机推荐
- mac rsync文件传输
rsync -avz filename servername:/filename --exclude '*.log' --exclude '*.pyc' --exclude '*.db' --excl ...
- fastdfs:安装nginx
#安装依赖 yum -y install gcc yum -y install gcc-c++ yum -y install zlib-devel yum -y install pcre-devel ...
- Go语言之Windows 10开发工具LiteIDE初步使用
Intel Core i5-8250U,Windows 10家庭中文版,go version go1.11 windows/amd64,LiteIDE X34.1 在RUNOOB.COM的Go语言教程 ...
- java虚拟机规范(se8)——java虚拟机结构(三)
2.6. 栈帧 栈帧用于存储数据和部分结果,同样也用于执行动态链接,返回方法的值和分派异常. 当方法被调用的时候会创建一个新的栈帧.当一个方法调用结束时,它对应的栈帧就被销毁了,不管是正常调用结束还是 ...
- java 异常链
1.) 常常会想要在捕获一个异常后抛出另一个异常,并且希望把原始异常的信息保存下来,被称为异常链. 2.)Throwable子类在构造器中可以接受一个cause(因由)对象作为参数.这个cause就是 ...
- java PriorityQueue(优先级队列)
先进先出描述了最典型的队列.队列规则是值在给定一组队列中的元素的情况下,确定下一个弹出队列的元素的规则,先进先出声明的是下一个元素应该是等待时间最长的元素 优先级队列声明下一个弹出的元素是最需要的元素 ...
- 1 、在Linux(centos6.8)系统下的JDK安装与配置
一.解压jdk安装包: 附上jdk1.8的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21 ...
- Codeforces Round #475 (Div. 2) C - Alternating Sum
等比数列求和一定要分类讨论!!!!!!!!!!!! #include<bits/stdc++.h> #define LL long long #define fi first #defin ...
- 使用SOCKET获取网页的内容
使用fsockopen()函数来实现获取页面信息,完整代码如下 //设置字符集(由于要抓取的网易网站字符集编码是gbk编码) header("content-type:text/html;c ...
- ZooKeeper与Eureka对比
简介 Eureka [ jʊ'rikə ]本身是Netflix开源的一款提供服务注册和发现的产品,并且提供了相应的Java封装.在它的实现中,节点之间相互平等,部分注册中心的节点挂掉也不会对集群造成影 ...