当前位置:编程学习 > C#/ASP.NET >>

Process 下 TotalProcessorTime 使用

  .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)  受  尽  鄙视   我也有点小感悟了~~~`~~~
          有兴趣的朋友  回下贴  支持下吧! --------------------编程问答-------------------- 算了,不鄙视你了...去看看《操作系统原理》吧... --------------------编程问答--------------------
引用 1 楼 vrhero 的回复:
算了,不鄙视你了...去看看《操作系统原理》吧...

    您这比  鄙视  更加犀利了》》
     具体点  行么!!! --------------------编程问答--------------------    例子里  有点东西没有  描述清楚 在10秒里Process.TotalProcessorTime取出来的值是3秒钟
     的意思是用现在得到的TotalProcessorTime减去10之前的TotalProcessorTime得到的差值是3秒 --------------------编程问答--------------------    这问题  就真的这么  低能吗?    唯一的回复就是  让我自己去看书  为了知道准确的答案  我在发贴前就看过《深入理解计算机系统(原书第2版)》  相关内容。  被一楼藐视后  又去看了一遍!我真的没找到答案
我真的不知道《操作系统原理》是个神马 神物   我就想不通了  一楼既然说了这样的一番话  当然自己是很了解了 那么您为何不肯 给我任何提示   您就这么不屑于跟我浪费一点的时间  解释下(您可以来解释下么)
    
   都有一点不敢问了! 
   汗   今天  一起来就不爽  都想放弃了   但没想到  看看自己的头像居然有2个绿色的三角形!自己终于升级了! 也不知道这个积分是怎么算的 不过升级之后还是小有  成就感的
   实在是太  不平衡了  上面的言论或许有点偏激  请海涵!    --------------------编程问答-------------------- 感觉应该是说这个程序,获得CPU后,多少时间,失去CPU的控制权
就是CPU调度的一个时间,猜的,帮助上说得太少了 --------------------编程问答-------------------- 噶是关于关于入狱愚夫愚妇日前 --------------------编程问答-------------------- --------------------编程问答-------------------- 刷刷
哗哗哗 --------------------编程问答-------------------- 感觉应该是说这个程序,获得CPU后,多少时间,失去CPU的控制权
就是CPU调度的一个时间 --------------------编程问答-------------------- 问题  还是  没有搞的很明白   网上找了很多相关  实例  其中一些本身就是错误的  出来的值跟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的多任务的工作模式  也知道进程的空闲时间 这东西的存在   
      我希望  知道的朋友  能够直接针对  我的问题  给点提示!
       --------------------编程问答-------------------- 除非你是用底层代码写的程序有意的去使用多CPU的多任务合作,否则的话,一般通通都是用1个CPU的,除非是某些特殊操作系统层面上帮你封装过。 --------------------编程问答-------------------- 楼主是个实在人啊。。。最近我在看数据结构与算法的c#语言描述版本。。。书中测试排序算法所花时间也是用的 Process.TotalProcessorTime,但是我发现在执行算法前后,即:
                   start = Process.GetCurrentProcess().Threads[0].TotalProcessorTime;
                bubblesort.BubbleSort();
                end = Process.GetCurrentProcess().Threads[0].TotalProcessorTime;
中start 和 end  值是一样的。能帮忙解释吗?。。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,