我想优化一种方法,以便在更短的时间内运行。我正在使用System.currentTimeMillis()
来计算它持续的时间。
但是,我刚刚阅读了System.currentTimeMillis()
Javadoc,它说:
此方法不应用于测量超时或其他已用时间 时间测量,因为改变系统时间会影响结果。
所以,如果我不能用它来衡量经过的时间,我应该如何测量呢?
答案 0 :(得分:2)
Android原生Traceview将帮助您衡量时间,并会为您提供更多信息。 使用它就像:
// start tracing to "/sdcard/calc.trace"
Debug.startMethodTracing("calc");
// ...
// stop tracing
Debug.stopMethodTracing();
Android开发者博客中包含more information的帖子
还要考虑@ Rajesh J Advani帖子。
答案 1 :(得分:1)
System.currentTimeMillis()
存在一些问题。
您仍然可以使用此方法,但您需要牢记以上几点。正如其他人所提到的,分析器是衡量系统性能的更好方法。
答案 2 :(得分:1)
欢迎来到基准测试的世界。
正如其他人指出的那样 - 基于计时方法(如currentTimeMillis)的技术只会告诉您经过的时间,而不是方法在CPU中花费的时间。
我不知道在Java中将方法的时间与CPU花费的时间隔离的方法 - 答案是: 1)如果方法是长时间运行(或者你运行多次,同时使用基准测试规则,比如不丢弃每个结果),请使用类似Linux上的“时间”工具(http://linux.die.net/man/1/time),他们会告诉你如何应用程序花在CPU上的时间很长(显然你必须带走应用程序启动的开销等)。 2)像其他人指出的那样使用分析器。这具有诸如使用跟踪技术增加过多开销的危险 - 如果它使用堆栈采样,则不会100%准确 3)我不确定这对Android有多可行 - 但是你可以让你的bechmark在一个安静的多核系统上运行并隔离一个核心(或理想的整个套接字),只能运行你的应用程序。
答案 3 :(得分:-1)
您可以使用名为System.nanoTime()的内容。如此处所示 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#nanoTime()
正如文件所说
此方法只能用于测量经过时间,与系统或挂钟时间的任何其他概念无关。
希望这会有所帮助。
答案 4 :(得分:-1)
在链接页面中引用单词:elapsedRealtime()和elapsedRealtimeNanos()返回自系统启动以来的时间,并包括深度睡眠。该时钟保证是单调的,即使在CPU处于省电模式时也会继续打勾,因此是通用间隔时序的推荐基础。