处理多值方法返回的最有效方法是什么?

时间:2014-12-14 00:32:55

标签: android performance

我有一个返回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方法更有效吗?

我的第二个问题:除了方法调用之前和之后的系统时间差异之外,是否有检查/比较代码效率的一般方法?或者时差是最终的工具?

1 个答案:

答案 0 :(得分:3)

调用方法两次而不是存储返回值将是低效的。

测试效率的一种方法是编写单元测试并使用这两种方法,在循环中调用它们10k次,看看会发生什么。

但是,无论如何,如果它们在每次调用时返回相同的值,请尝试多次最小化调用方法。

关于字符串的要点是字符串必须被垃圾收集,因为它们不会附加到。因此,您需要创建需要收集的额外对象。因此,将它直接附加到StringBuffer只是有意义限制垃圾收集器运行的时间。

如果你采用单元测试方法,你也可以监控垃圾收集,看看有什么区别。

监控垃圾收集的一种方法是遵循以下文章: http://www.raizlabs.com/dev/2014/04/hunting-your-leaks-memory-management-in-android-part-2-of-2/

一旦使用DDMS并导致垃圾收集以查看已分配了多少内存,但还有其他方法。