创建更多对象而不是执行计算,效果如何?

时间:2012-08-28 09:38:33

标签: java model-view-controller

我有一个数据集合(模型),其中每个元素都有一个带有标签的JPanel形式的可视化表示(View)。以下是更新GUI页面的方法:

public void updateGUIPage(){
    guiPage.removeAll();
    for(MyElement element: myCollection) {
        guiPage.add(new VisualElementWhichExtendsJPanel(element);
        guiPage.add(Box.createVerticalStrut(10);
    }
}
每次收集更改时都会调用 updateGUIPage()。如您所见,已删除已创建的可视元素(正如我从书中所知,它们稍后将被垃圾收集器销毁),并为集合中的每个元素创建新的可视元素。 我没有发现这种方式非常有效,但它通常简化了非常多的应用程序(因为有很多GUIPages,并且其中许多显示相同的元素,所以如果添加到第二个GUIPage,它将从第一个删除,这就是Swing的工作原理) 因此,问题是:您是否允许在您的应用程序中使用此类方法,或者最好进行额外的计算并避免过度创建新对象(考虑到平均收集大小将很少超过100个成员)?

2 个答案:

答案 0 :(得分:2)

完全同意 assylias ,我在UI开发方面的经验(2年以上的GWT)告诉我同样的事情。为了简单起见,但要确保测量性能以确定方法的极限。

答案 1 :(得分:1)

  

所以,问题是:您是否允许在您的应用程序中使用此方法,或者最好进行额外的计算并避免过度创建新对象(考虑到平均收集大小将很少超过100个成员)?

答案取决于创建新对象的相对成本与更新它们的成本。确定这些成本的唯一方法是衡量它们。 (而相关的问题是绝对表现是否“击中”它是否会以较慢的方式做到这一点足以产生真正的差异......)

但是,这听起来像是一个过早优化的情况。我认为你会更好地以更简单的方式实现应用程序,然后看看它的执行情况。如果它太慢,那么 profile 它可以确定实际性能瓶颈的位置。如果分析告诉你这个方法是一个重要的瓶颈,考虑做一些事情......否则,不管它。