蚂蚁或dotTrace探查器中CPU时间值的分辨率是多少



根据我之前的研究,如果我们想测量函数的CPU时间,分辨率计时器约为15.6ms,这意味着我们可以获得0,15.6,32.2ms的值

int a=Process.getCurrentProcess.UserProcessTime;
functionTest();
int b=Process.getCurrentProcess.UserProcessTime;
(b-a) //value like 0,15.6,32.2 ms

但使用像dotTrace或ant这样的性能分析器,我在时间列中看到计时选项是"CPU时间"值,如4.129;1.032毫秒所以这是一个高分辨率。

通过编码获得此分辨率的方法是什么?

functionTest是===>

private long FindPrimeNumber(int n)
{
int count = 0;
long a = 2;
while (count < n)
{
long b = 2;
int prime = 1;// to check if found a prime
while (b * b <= a)
{
if (a % b == 0)
{
prime = 0;
break;
}
b++;
}
if (prime > 0)
count++;
a++;
}
return (--a);
}

这很可能是WinAPI中的本机方法,您可以通过DLLImport从C#调用它们。但为了简单起见,您可以尝试从这里使用第三方包装器。

但是你应该清楚地了解你在做什么。函数的第一次调用和第二次调用之间会因为JITting时间而有所不同。如果你的方法分配了内存,那么在调用你的方法时,GC可能随时发生,它将反映在测量中。

最新更新