目前在我的Android代码中,我正在做的计算每个功能的CPU使用率是 -
double start = System.currentTimeMillis();
double start1 = Debug.threadCpuTimeNanos();
foo();
double end = System.currentTimeMillis();
double end1 = Debug.threadCpuTimeNanos();
double t = (end - start);
double t1 = (end1 - start1)/1000000;
double CPUusage;
if(t==0){
CPUusage = 0;
}else{
CPUusage = (t1/t) * 100;
}
我正在做t1 / t来计算CPU使用率。这是计算我的Android代码中每个函数的CPU使用率的正确方法,还是在概念上错了?请求有人指导我。
答案 0 :(得分:0)
static long currentTimeMillis()
返回自1970年1月1日00:00:00.0 UTC以来的当前时间(以毫秒为单位)。
请用长音替换你正在使用的双音色。
虽然long(s)有精度问题,但它们几乎与所使用的变量无关,而且舍入可能足够接近,返回的值可以相互关联使用
此外,您正在比较两个独立的值。尝试当前线程或完整线程时间。
public static long threadCpuTimeNanos()
在API级别1中添加 获取线程CPU使用情况的指示。返回值表示当前线程执行代码或等待某些类型的I / O所花费的时间。时间以纳秒表示,仅与早期调用的结果相比才有意义。请注意,纳秒分辨率并不意味着纳秒精度。在不支持此操作的系统上,调用返回-1。
尝试在相同的Runnable(顺序放置的方法调用)中使用:
long start = Debug.threadCpuTimeNanos();
foo();
long finish = Debug.threadCpuTimeNanos();
long outputValue = finish - start ;
System.out.println("foo() took " + outputValue + " ns.");