转载:http://www.cnblogs.com/yanpeng/archive/2008/10/15/1943369.html

对一个服务器程序想统计每秒可以处理多少数据包,要如何做?答案是用处理数据包的总数,除以累记处理数据包用的时间。这里要指出的是, 运行一段程序,使用的cpu时间,跟实际运行的时间是不一样的。附例如下:

  1: 		private void ShowRunTime()
  2: 		{
  3: 			TimeSpan ts1 = Process.GetCurrentProcess().TotalProcessorTime;
  4: 			Stopwatch stw = new Stopwatch();
  5: 			stw.Start();
  6: 			int Circles = 1000;
  7: 			for (int i = 0; i < Circles; ++i)
  8: 			{
  9: 				Console.WriteLine(i.ToString());
 10: 			}
 11: 			double Msecs = Process.GetCurrentProcess().TotalProcessorTime.Subtract(ts1).TotalMilliseconds;
 12: 			stw.Stop();
 13: 			Console.WriteLine(string.Format("循环次数:{0} CPU时间(毫秒)={1} 实际时间(毫秒)={2}", Circles, Msecs, stw.Elapsed.TotalMilliseconds, stw.ElapsedTicks));
 14: 			Console.WriteLine(string.Format("1 tick = {0}毫秒", stw.Elapsed.TotalMilliseconds / stw.Elapsed.Ticks));
 15: 		}
 16: 

程序输出如下:

     循环次数:1000 CPU时间(毫秒)=50.072 实际时间(毫秒)=666.9071

     1 tick = 0.0001毫秒

     可以看出在这个例子中,两者差距比较大,其原因如下:

     1)Windows是多任务操作系统,按照线程为单位对cpu时间轮询分配。即一个程序运行的中途,可能被剥夺cpu资源,供其他程序运行。

     2)程序本身会有不占用cpu时间的等待过程。这个等待可能是我们程序主动的,比如启动一个进程,然后等待进程的结束;也可能是我们没有意识到的,如例子 的Console.WriteLine方法,猜想其内部进行了一系列的异步I/O操作然后等待操作的完成,这其间并没有占用调用进程的cpu时间,但耗费 了很多等待时间。

     总结:

     1)性能的测量,应该用程序运行时间来测量,当然也需要使用cpu时间作为参考,如果两者差距很大,需要考虑为何出现这种情况。

     2).Net的Stopwatch类可以精确到1/10000毫秒,基本可以满足测量精度。

以上部分为转载。

个人整理:参考(http://social.microsoft.com/Forums/zh-CN/d3f98b59-da69-4b29-8a0a-813c4ab227c9/stopwatchelapsedtickselapsedticks

Elapsed和ElapsedMilliseconds属性在被调用时,会在内部调用kernel32中的QueryPerformanceFrequency()函数以获取处理器支持的高精度计时器的频率,随后用这个数字对获取的时间差值进行修正,最后Elapsed属性会返回一个新的TimeSpan对象。而获取ElapsedTicks属性时则不会进行这种高精度的计算(修正)。但是一般来说这两者的误差并不是很大。如果需要精确计算时间或是测试数据量特别大的情况下,推荐使用Elapsed和ElapsedMilliseconds属性。

存在疑问

我测试之后发现并没有像如下所说的结论,我已经回复原作者,暂未得到答复。希望知道原因的朋友指明下。谢谢。

从内部实现来看,StopWatch.IsHighresolution = true时,StopWatch.Elapsed.Ticks应该等于StopWatch.ElapsedTicks再乘以frequency(频率的常量)。反之,这2个数在IsRunning为true时,应该是相等的。所以照理应该是StopWatch.Elapsed.Ticks会比较大。

C#测量程序运行时间及cpu使用时间的更多相关文章

  1. C#测量程序运行时间及cpu使用时间实例方法

    private void ShowRunTime() { TimeSpan ts1 = Process.GetCurrentProcess().TotalProcessorTime; Stopwatc ...

  2. C#实现测量程序运行时间及cpu使用时间

    private void ShowRunTime() { TimeSpan ts1 = Process.GetCurrentProcess().TotalProcessorTime; Stopwatc ...

  3. C# 测试程序运行时间和cpu使用时间

    方法一 Stopwatch类测试程序运行时间和cpu使用时间 添加命名空间using System.Diagnostics;使用实例如下 private Stopwatch sw = new Stop ...

  4. C# 测量程序运行时间

    using System.Diagnostics; Stopwatch watch = new Stopwatch(); watch.Start(); /* 需要测量运行时间的程序 */ watch. ...

  5. 测量C++程序运行时间

    有个很奇怪的现象,我自认为写得好的文章阅读量只有一百多,随手写的却有一千多--要么是胡搞,要么是比较浅显.纵观博客园里众多阅读过万的文章,若非绝世之作,则必为介绍入门级知识的短文.为了让我的十八线博客 ...

  6. [daily]使用rdtsc指令,测量程序的运行速度 [转]

    原文地址:http://blog.chinaunix.net/uid-24774106-id-2779245.html 最近搞架构,一直在讨论.听人提到,自行科普了一下,先转发,mark.有机会深入学 ...

  7. C/C++下测量函数运行时间

    C/C++下测量函数运行时间 time.h介绍 C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t. clock_t clock( void ); 这个函数返回从" ...

  8. VC++程序运行时间测试函数

    0:介绍 我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数.还比如我们通过记录函数或者算 ...

  9. C++程序运行时间-ZZ

    [15.5.25]贴一段实用的代码,linux下跑过. #include <stdio.h> /* printf */ #include <time.h> /* clock_t ...

随机推荐

  1. How to get FlowLayoutPanel.AutoSize to work with FlowBreak

    have a problem with a FlowLayoutPanel and I don't know how to solve it. I'm placing two FlowLayoutPa ...

  2. CodeBlocks+opencv2.4.4+cmake+MinGW

    /*-----------------------------------------------------------------------------*   *   版权声明:*   可以任意 ...

  3. LCD platform_device(s5pv210)

    devs.c:   static struct resource s3cfb_resource[] = { [0] = { .start= S5P_PA_LCD, .end= S5P_PA_LCD + ...

  4. ionic如何uglify和minify你的js,css,image,png....

    Install:   1.ionic start myapp blank      2.cd myapp     3.npm install cordova-uglify or npm install ...

  5. vim配置vimrc详解

    vimrc的存放位置: 系统 vimrc 文件: "$VIM/vimrc" 用户 vimrc 文件: "$HOME/.vimrc" 用户 exrc 文件: &q ...

  6. Windows 服务 创建 和 安装 -摘自网络

    What a Windows Service is Enables you to create long-running executable applications that run in the ...

  7. sqlMetal用法和例子 自定义DBML

    SqlMetal是跟随VS发布的一个自动工具,可以用来生成数据库的Linq代码. 这是中文版的帮助文件. SqlMetal [选项] [<输入文件>] 为 .NET Framework 的 ...

  8. linux定时运行命令脚本——crontab

    cron和crontab定时任务: http://blog.csdn.net/ithomer/article/details/6817019 http://blog.sina.com.cn/s/blo ...

  9. apache安装php7过程中遇到到段错误

    1.假如apache的配置文件httpd.conf同时加载libphp5.so和libphp7.so 2.如图所示,modules下同时存在libphp5.so/libphp7.so 3.启动apac ...

  10. linux命令之cat

    转自:http://www.cnblogs.com/peida/archive/2012/10/30/2746968.html cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容, ...