我有一个返回Point
的方法:
private Point getDisplayWH() {
Display display = this.getWindowManager().getDefaultDisplay();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
Point realWH = new Point();
display.getSize(realWH);
return realWH;
}
return new Point(display.getWidth(), display.getHeight());
}
现在,收到此结果后,我无法判断 哪个更有效。
数字1 :
Point displayWH = getDisplayWH();
layoutPreviewDim = calcCamPrevDimensions(displayWH.x, displayWH.y));
2号:
layoutPreviewDim = calcCamPrevDimensions(getDisplayWH().x, getDisplayWH().y));
在this article中,据说:
如果你有一个方法返回一个字符串,并且你知道它的结果总是会附加到一个StringBuffer上,那么改变你的签名和实现,以便函数直接追加,而不是创建一个短暂的临时对象
但即使我不得不多次调用该方法以获得回报,我是否应该遵循这些说明?我的display
方法中的getDisplayWH()
变量怎么样?这种方法比直接Display
{/ 1}}访问this.getWindowManager().getDefaultDisplay().xxxx
方法更有效吗?
我的第二个问题:除了方法调用之前和之后的系统时间差异之外,是否有检查/比较代码效率的一般方法?或者时差是最终的工具?
答案 0 :(得分:3)
调用方法两次而不是存储返回值将是低效的。
测试效率的一种方法是编写单元测试并使用这两种方法,在循环中调用它们10k次,看看会发生什么。
但是,无论如何,如果它们在每次调用时返回相同的值,请尝试多次最小化调用方法。
关于字符串的要点是字符串必须被垃圾收集,因为它们不会附加到。因此,您需要创建需要收集的额外对象。因此,将它直接附加到StringBuffer
只是有意义限制垃圾收集器运行的时间。
如果你采用单元测试方法,你也可以监控垃圾收集,看看有什么区别。
监控垃圾收集的一种方法是遵循以下文章: http://www.raizlabs.com/dev/2014/04/hunting-your-leaks-memory-management-in-android-part-2-of-2/
一旦使用DDMS
并导致垃圾收集以查看已分配了多少内存,但还有其他方法。