我有一个返回 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据说:
If you have a method returning a string, and you know that its result will always be appended to a StringBuffer anyway, change your signature and implementation so that the function does the append directly, instead of creating a short-lived temporary object.
但即使我必须多次调用该方法才能获得返回,我是否应该遵循这些说明?我的 getDisplayWH()
方法中的 display
变量怎么样?它是否比直接访问 Display
方法更有效 this.getWindowManager().getDefaultDisplay().xxxx
?
我的第二个问题:除了方法调用前后的系统时间差之外,是否有通用的方法来检查/比较代码效率?还是时差才是终极工具?
最佳答案
两次调用一个方法而不是存储返回值将是低效的。
测试效率的一种方法是编写单元测试,也许使用这两种方法,在循环中调用它们 10k 次,然后看看会发生什么。
但是,无论如何,尽量减少多次调用方法,如果它们在每次调用时返回相同的值。
关于字符串的要点是字符串必须被垃圾收集,因为它们没有附加到。因此,您创建了需要收集的额外对象。因此,将它直接附加到 StringBuffer
只是为了限制垃圾收集器运行的时间。
如果您采用单元测试方法,您还可以监控垃圾回收以查看有何不同。
监视垃圾收集的一种方法是遵循这篇文章: http://www.raizlabs.com/dev/2014/04/hunting-your-leaks-memory-management-in-android-part-2-of-2/
一种方法是使用 DDMS
并引发垃圾回收以查看分配了多少内存,但还有其他方法。
关于android - 处理多值方法返回的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27465132/