我有一个带有(4)线程的多线程应用程序我想知道在线程中花费了多少处理时间。我用ThreadPool
创建了所有这些线程 Thread1做job1
Thread2做job2
..
..
结果将是:
Thread1在12毫秒内运行
Thread2以20毫秒的速度运行
我实际上在一个作业中下载了一个网页,每个作业都在一个线程中处理我想知道网页下载需要多少时间(没有计算其他线程上下文切换的影响)时间
答案 0 :(得分:7)
答案 1 :(得分:5)
如果你想获得秒表的总时间,那就是Stopwatch类:
Stopwatch sw = Stopwatch.StartNew();
// execute code
sw.Stop();
// read and report on sw.ElapsedMilliseconds
如果你想知道线程实际执行代码的时间(而不是等待I / O等),你可以通过枚举{{3}的线程来检查ProcessThread.TotalProcessorTime属性。你的应用程序的对象。
请注意,线程池中的线程在使用后不会被销毁,而是留在池中以便重用,这意味着线程的总时间包括它在当前工作负载之前所做的所有事情。
答案 2 :(得分:2)
WMI类Win32_Thared
包含属性KernelModeTime
和UserModeTime
,如果可用,它们将为您提供100ns实际执行单位的计数。
但是,来自documentation:
如果此信息不可用,则应使用值0(零)。
因此,这可能取决于操作系统(在Win7上肯定会填充它)。
像select * from win32_thread where ProcessHandle="x"
这样的查询将获取进程ID Win32_Thread
的{{1}}个实例(忽略名称中的“句柄”)。例如,使用PowerShell,查看自己的线程:
x
(并确认这不是经过的时间,过程开始时间是2010-09-30 16:44:50。
答案 3 :(得分:-3)
无法完成。问题是,除非你阻止它(很难做到 - 没什么意义)线程可以被智能化。因此,虽然它要完成THread2 20ms,但你不知道它有多少是活跃的。
所谓的超级多任务处理的消极方面。