3

为了调试我们放置的 Android 代码System.out.println(string),我们可以知道一个函数被调用了多少次。另一种方法是放置一个标志并在每次函数调用后继续增加它。然后在最后打印 flag by 的最终值System.out.println(...)。(实际上在我的应用程序中,该函数将被调用数千次)

我的问题是:就CPU 资源时钟周期而言,哪个更轻:增量操作还是 System.out.println?

4

2 回答 2

3

增量将变得更加高效——尤其是如果您实际上有任何地方可以输出该输出。想想System.out.printlnvs 递增变量所需的所有操作。当然,影响是否真的显着是另一回事——如果你的方法已经做了很多工作,那么System.out.println调用实际上可能不会有太大的不同。但是,如果您只想知道它被调用了多少次,那么保持计数器比查看日志更有意义,IMO。

我建议使用AtomicLongorAtomicInteger而不是仅仅使用原始变量,因为这样您可以获得简单的线程安全。

于 2012-05-05T08:04:14.847 回答
0

就时钟周期而言,增量会快得多。假设增量非常接近硬件增量,它只需要几个时钟周期。这意味着你每秒可以做数百万。

另一方面 System.out.println 将不得不调用操作系统。使用标准输出。转换字符等。这些步骤中的每一个都需要很多很多时钟周期。

回到您最初的问题,如果您正在查看函数被调用的次数,您可以尝试运行分析器 - 有各种桌面和 Android 解决方案可用。这样你就不需要用计数/打印来污染你的代码,并且你可以保持你的生产代码精简。

再进一步思考,为什么你想知道函数被调用的确切次数?如果您担心缺陷,请考虑编写一些单元测试,以准确证明函数被调用了多少次。如果您担心性能,或许可以结合分析器查看负载测试技术。

于 2012-05-05T08:14:37.500 回答