Process 下 TotalProcessorTime 使用

lulianqi 2010-12-15 11:12:57
.net里有这样一个类Process
实例化后可以访问其属性
Process.TotalProcessorTime
得到一个timespan类型的值
这个是“获取此进程的总的处理器时间。”(msdn上是这样写的)

如果我们的计算机是双核或更多核·····
那么这个属性取出来的值 是相对于单纯的计算机时间的
还是计算机时间乘以cpu核心数(或是线程数)
或者存在更加复杂的对应关系

此处的 “多线程” 是指具有超线程能力的cpu(不是 进程 线程 这样的东西)
此处的 时间 翻倍 是指整个cpu时间 不是单个进程消耗的时间 加倍


举个例子:x进程 在10秒里Process.TotalProcessorTime取出来的值是3秒钟
我的计算机cup是i5 双核心 4线程(使用超线程技术)
那么这时x进程在这10秒平均cpu占用率是 3/10 还是3/20 或是3/40 甚至有更复杂的算法


ps此帖发过一次(http://topic.csdn.net/u/20101215/02/2b5381c3-6ac5-45ec-9e04-f5b023ac5ba4.html?07786578159406969#replyachor) 受 尽 鄙视 我也有点小感悟了~~~`~~~
有兴趣的朋友 回下贴 支持下吧!
...全文
415 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
erdaoxiong 2013-04-21
  • 打赏
  • 举报
回复
楼主是个实在人啊。。。最近我在看数据结构与算法的c#语言描述版本。。。书中测试排序算法所花时间也是用的 Process.TotalProcessorTime,但是我发现在执行算法前后,即: start = Process.GetCurrentProcess().Threads[0].TotalProcessorTime; bubblesort.BubbleSort(); end = Process.GetCurrentProcess().Threads[0].TotalProcessorTime; 中start 和 end 值是一样的。能帮忙解释吗?。。
JMsun_2000 2011-11-28
  • 打赏
  • 举报
回复
除非你是用底层代码写的程序有意的去使用多CPU的多任务合作,否则的话,一般通通都是用1个CPU的,除非是某些特殊操作系统层面上帮你封装过。
lulianqi 2010-12-19
  • 打赏
  • 举报
回复
问题 还是 没有搞的很明白 网上找了很多相关 实例 其中一些本身就是错误的 出来的值跟Windows任务管理器里的值得差距太大了 还有一些是没一次单独获得 cpu总时间 (所有进程时间之和/1-空闲进程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));
    }

代码本身对我的问题没什么帮助! 我只是想说明 我明白Windows的多任务的工作模式 也知道进程的空闲时间 这东西的存在
我希望 知道的朋友 能够直接针对 我的问题 给点提示!
x352174652 2010-12-16
  • 打赏
  • 举报
回复
感觉应该是说这个程序,获得CPU后,多少时间,失去CPU的控制权
就是CPU调度的一个时间
BRC420647401 2010-12-16
  • 打赏
  • 举报
回复
刷刷
哗哗哗
BRC420647401 2010-12-16
  • 打赏
  • 举报
回复
噶是关于关于入狱愚夫愚妇日前
wufan110 2010-12-16
  • 打赏
  • 举报
回复
感觉应该是说这个程序,获得CPU后,多少时间,失去CPU的控制权
就是CPU调度的一个时间,猜的,帮助上说得太少了
lulianqi 2010-12-16
  • 打赏
  • 举报
回复
这问题 就真的这么 低能吗? 唯一的回复就是 让我自己去看书 为了知道准确的答案 我在发贴前就看过《深入理解计算机系统(原书第2版)》 相关内容。 被一楼藐视后 又去看了一遍!我真的没找到答案
我真的不知道《操作系统原理》是个神马 神物 我就想不通了 一楼既然说了这样的一番话 当然自己是很了解了 那么您为何不肯 给我任何提示 您就这么不屑于跟我浪费一点的时间 解释下(您可以来解释下么)

都有一点不敢问了!
汗 今天 一起来就不爽 都想放弃了 但没想到 看看自己的头像居然有2个绿色的三角形!自己终于升级了! 也不知道这个积分是怎么算的 不过升级之后还是小有 成就感的
实在是太 不平衡了 上面的言论或许有点偏激 请海涵!
lulianqi 2010-12-15
  • 打赏
  • 举报
回复
例子里 有点东西没有 描述清楚 在10秒里Process.TotalProcessorTime取出来的值是3秒钟
的意思是用现在得到的TotalProcessorTime减去10之前的TotalProcessorTime得到的差值是3秒
lulianqi 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vrhero 的回复:]
算了,不鄙视你了...去看看《操作系统原理》吧...
[/Quote]
您这比 鄙视 更加犀利了》》
具体点 行么!!!
vrhero 2010-12-15
  • 打赏
  • 举报
回复
算了,不鄙视你了...去看看《操作系统原理》吧...

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧