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

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

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

程序输出如下:

循环次数: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毫秒,基本可以满足测量精度。

时间: 2024-12-31 14:52:00

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

10种检测Python程序运行时间、CPU和内存占用的方法_python

在运行复杂的Python程序时,执行时间会很长,这时也许想提高程序的执行效率.但该怎么做呢? 首先,要有个工具能够检测代码中的瓶颈,例如,找到哪一部分执行时间比较长.接着,就针对这一部分进行优化. 同时,还需要控制内存和CPU的使用,这样可以在另一方面优化代码. 因此,在这篇文章中我将介绍7个不同的Python工具,来检查代码中函数的执行时间以及内存和CPU的使用.1. 使用装饰器来衡量函数执行时间 有一个简单方法,那就是定义一个装饰器来测量函数的执行时间,并输出结果:   import tim

python计算程序开始到程序结束的运行时间和程序运行的CPU时间_python

执行时间 方法1 复制代码 代码如下: import datetimestarttime = datetime.datetime.now()#long runningendtime = datetime.datetime.now()print (endtime - starttime).seconds 方法 2 复制代码 代码如下: start = time.time()run_fun()end = time.time()print end-start 方法3 复制代码 代码如下: start

统计程序运行时间的C++源代码

目前,根本没有办法精确测量程序运行时间,但可用两类方法进行估测:一是基于计时器Timer,一是基于计数器Counter.一) 基于Timer的测量方法 缺点:精度不够,不能用于程序运行持续时间小于100ms的测量 优点:准确性不是十分依赖于系统负载,并且在执行时间大于1s的程序上,与理论值之间的误差很低方法:在程序开始时读取计时器的内容,在程序终止前再次读取Timer的内容. 接口函数:(1)Unix/Linuxclock_t times(struct tms *buf);//return va

VC获取系统时间、程序运行时间

1.使用CTime类 CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime(); str=tm.Format("现在时间是%Y年%m月%d日 %X"); MessageBox(str,NULL,MB_OK); 2: 得到系统时间日期(使用GetLocalTime) SYSTEMTIME st; CString strDate,strTime; GetLocalTime(&st); strDate.Format(&quo

firefox-几个程序 都占用 cpu 25%,有4个程序都占 25% ,就变成 100%,电脑就开始卡了

问题描述 几个程序 都占用 cpu 25%,有4个程序都占 25% ,就变成 100%,电脑就开始卡了 Java 新手,用的笔记本 cpu 是 i3-4000M : 每天打开 firefox,MyEclipse 后,firefox 占用 cpu 25%, javaw 也占用 cpu 25%, 自带的 explorer 也占用 cpu 25%, 有时再开个 ie ,又是 25%,cpu 一满就开始卡,只能 退掉一个程序 cpu 才能降下来: 求解? 是 cpu 太渣了么? 解决方案 估计系统问题,

linux4核的电脑程序吧一个cpu占满了(100%)以后挂在那儿不动了,其它cpu还没用呢??

问题描述 linux4核的电脑程序吧一个cpu占满了(100%)以后挂在那儿不动了,其它cpu还没用呢?? 解决方案 你的程序不会天然占用所有的内核,除非你用了多线程,并且没有同步.否则即便程序死循环,也只用一个cpu. 解决方案二: 说明可能是这个程序的一个线程忙死了,所以它只使用了一个 CPU.

查看安卓程序运行时间-第三方应用查看其它应用程序运行时间

问题描述 第三方应用查看其它应用程序运行时间 自己写的项目要查看其它应用程序的运行时间 会用到com.android.internal.app.IUsageStats$Stub这个,但是google规定的不让sdk直接用,如果在源码环境下使用这个类的话应该如何去做呢?我有编译好的源码,如何用在自己的项目里呢?如何打成apk呢? 解决方案 http://blog.csdn.net/gf771115/article/details/9001507 解决方案二: 这样说吧,我手上有源码,有eclips

C++:程序运行时间

C++使用C语言的time库, 即可统计程序的运行时间; 头文件#include <ctime> 代码: #include<iostream> #include<ctime> void do_something() { for(int i=0;i<100000;i++) for(int j=0;j<10000;j++) ; } int main(int arg,char ** argv) { clock_t start = clock(); do_somet

Java应用程序中动态分配CPU资源

一个多任务系统需要在任务之间实现QoS(Quality of Service)管理时,如果CPU资源的分配基于Java线程的优先级,那么它在不同平台上运行时的效果是很难预测的. 本文利用协调式多任务模型,提出一个与平台无关.并且能在任务间动态分配CPU资源的方案. 现在,由于计算机系统已经从人机交互逐步向机机交互转化,计算机和计算机之间的业务对于时间的要求非常高.软件系统对于业务的支持已经不仅表现为对不同业务的逻辑和数据(算法+数据结构)支持,而且还表现为对同时处理不同任务的时效性(任务响应速度