浅谈C#测量cpu性能

开发 后端
本文介绍C#测量cpu性能,Windows是多任务操作系统,按照线程为单位对cpu时间轮询分配。即一个程序运行的中途,可能被剥夺cpu资源,供其他程序运行。

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

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

程序输出如下:

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

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

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

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

总结:

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

2 .Net的Stopwatch类可以精确到1/10000毫秒,基本可以满足测量精度。 以上介绍C#测量cpu性能

【编辑推荐】

  1. 概述C#实现文件下载
  2. C#搞定网站验证码的方法
  3. 浅谈C# String对象
  4. C#命名空间学习笔记
  5. 浅析C#调用ActiveX控件
责任编辑:佚名 来源: 51CTO.COM
相关推荐

2011-09-21 10:56:31

C#结构

2009-08-20 18:30:33

C# ReaderWr

2009-08-19 17:12:18

C# Connecti

2009-08-12 11:24:25

C# String对象

2009-08-07 11:26:53

C#数组结构

2009-08-31 09:37:09

C# Employee

2009-08-26 13:15:38

C#选择控制

2009-08-26 15:46:01

C#匿名类型

2009-08-14 17:58:05

C#接口方法

2009-08-25 16:16:43

C# oledbcon

2009-09-02 15:41:21

C# HTTPWebR

2009-08-06 15:30:23

C#类型系统

2009-08-20 10:24:52

C#开发WinForm

2009-08-10 10:04:25

C#抽象类C#接口

2009-08-18 17:08:50

C#编写XML文档

2009-08-25 13:26:49

C#编写asp+

2009-08-27 14:44:11

C# interfac

2009-08-10 14:55:04

C#定义Nullabl

2009-08-28 15:58:54

C#窗体里调用

2009-08-24 17:24:28

C#创建XML文档
点赞
收藏

51CTO技术栈公众号