2014-12-19 48 views
0

我有一个在C#中一直运行的进程,它处于空闲状态,除非它收到一个处理请求。一旦接收到请求,它就继续处理该请求直到它完成,然后再次变为空闲。我想要获取类似于C++中的boost::timer::cpu_timer的每个请求的CPU挂壁时间,用户时间和系统时间。在c#中有boost :: timer :: cpu_timer的等价物吗?

Process.GetCurrentProcess().TotalProcessorTime, 
Process.GetCurrentProcess().UserProcessorTime 
Process.GetCurrentProcess().PrivilegedProcessorTime 

会给我所有请求的时间(因为它是一个连续的运行过程)。

我想要每个请求的时间。有没有在C#中的方法,我们可以得到这个?

+0

请注意,boost类也会计算整个过程的时间,而不仅仅是一个请求 - 如果在您的过程中执行多个“并发”操作,您将获得所有累计CPU时间。根本不存在可以根据不同的操作/请求来测量CPU时间的这种事情。无论是提升(原生)还是.net(托管)代码。 – 2014-12-19 08:23:34

+0

谢谢Christian.K。我希望在C#中使用类似于每个请求的东西。 boost :: timer :: cpu_timer m_timer; m_timer.start(); boost :: timer :: format(m_timer.elapsed(),boost :: timer :: default_places,“%w%u%s w/u/s”); – skini 2014-12-19 08:42:59

回答

2

如果一切都失败了,你总是可以计算差异。

请注意,这将不准确,因为不可避免地内核计数全部 CPU时间被分配给进程,而不仅仅是处理某个请求。

但是,只要您知道您在特定时间段内只提供了一项请求,请使用例如Process.GetCurrentProcess().TotalProcessorTime操作前后可以作为合理的估计。

+0

您可能需要强调的是,“这不会是准确的”,在使用boost时也会如此(因为OP似乎很担心这一点)。 – 2014-12-19 08:24:31

+0

@ Christian.K感谢您的补充。 – sehe 2014-12-19 08:27:01