在.NET线程上花了多少时间?

时间:2010-10-04 09:25:56

标签: c# .net multithreading

我有一个带有(4)线程的多线程应用程序我想知道在线程中花费了多少处理时间。我用ThreadPool

创建了所有这些线程

Thread1做job1
Thread2做job2
..
..

结果将是:
Thread1在12毫秒内运行 Thread2以20毫秒的速度运行

我实际上在一个作业中下载了一个网页,每个作业都在一个线程中处理我想知道网页下载需要多少时间(没有计算其他线程上下文切换的影响)时间

4 个答案:

答案 0 :(得分:7)

我在codeproject上找到了这段代码:

http://www.codeproject.com/KB/dotnet/ExecutionStopwatch.aspx

尝试并报告回来;)

答案 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包含属性KernelModeTimeUserModeTime,如果可用,它们将为您提供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,但你不知道它有多少是活跃的。

所谓的超级多任务处理的消极方面。