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) 受 尽 鄙视 我也有点小感悟了~~~`~~~
有兴趣的朋友 回下贴 支持下吧! --------------------编程问答-------------------- 算了,不鄙视你了...去看看《操作系统原理》吧... --------------------编程问答--------------------
您这比 鄙视 更加犀利了》》
具体点 行么!!! --------------------编程问答-------------------- 例子里 有点东西没有 描述清楚 在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#