为了调试我们的Android代码,我们放了System.out.println(string)
,它会告诉我们调用函数的次数。另一种方法是放置一个标志,并在每次函数调用后继续递增它。然后在最后按System.out.println(...)
打印标志的最终值。 (实际上在我的应用程序中,该函数将被称为数千次)
我的问题是:在 CPU资源 和 时钟周期 方面哪一个更轻:增量操作还是System.out.println?
答案 0 :(得分:3)
增量将更多,更多更高效 - 特别是如果你实际上已经获得了该输出的任何地方。考虑System.out.println
与增量变量所需的所有操作。当然,影响是否实际上重要是另一回事 - 如果你的方法已经做了很多工作,那么System.out.println
调用可能实际上并没有太大的区别。但是,如果你只是想知道它被调用了多少次,那么保留一个计数器比查看日志更有意义,无论如何,IMO。
我建议使用AtomicLong
或AtomicInteger
而不是只使用原始变量,这样就可以获得简单的线程安全性。
答案 1 :(得分:0)
在时钟周期方面,增量将更快 lot 。假设增量非常接近硬件增量,则只需要几个时钟周期。这意味着你可以每秒做数百万。
另一方面,System.out.println必须调用操作系统。使用标准输出。转换字符等。每个步骤都需要很多很多个时钟周期。
回到原来的问题,如果您正在查看调用函数的次数,您可以尝试运行一个分析器 - 可以使用各种桌面和Android解决方案。这样您就不需要通过计数/打印来污染代码,并且可以保持生产代码的精简。
再次进一步思考,你为什么要知道函数被调用的确切次数?如果你担心缺陷,可以考虑编写一些单元测试来准确证明函数被调用的次数。如果您担心性能问题,可以将负载测试技术与您的分析器结合使用。