0

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

public void updateGUIPage(){
    guiPage.removeAll();
    for(MyElement element: myCollection) {
        guiPage.add(new VisualElementWhichExtendsJPanel(element);
        guiPage.add(Box.createVerticalStrut(10);
    }
}

每次集合更改时都会调用 updateGUIPage()。如您所见,已经创建的视觉元素被删除(正如我从书中知道的,它们稍后将被垃圾收集器销毁),并为集合中的每个元素创建新的视觉元素。我觉得这种方法不是很有效,但它总体上简化了很多应用程序(因为有很多 GUIPage,其中许多显示相同的元素,所以如果添加到第二个 GUIPage,它将从第一个中删除,这就是 Swing 的工作方式)所以,问题是:您是否允许在您的应用程序中使用这种方法,或者最好进行额外的计算并避免过度创建新对象(考虑到集合的平均大小很少会超过 100 个成员)?

4

2 回答 2

2

完全同意assylias,我的 UI 开发经验(使用 GWT 2 年以上)告诉我同样的情况。追求简单,但一定要衡量性能以了解您的方法的局限性。

于 2012-08-28T09:47:30.093 回答
1

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

答案取决于创建新对象的相对成本与更新它们的成本。确定这些成本是多少的唯一方法是衡量它们。(相关的问题是,绝对性能是否以较慢的方式“击中”它是否足以产生真正的影响......)

但是,在我看来,这听起来像是过早优化的情况。我认为您最好以更简单的方式实现应用程序,然后看看它的性能如何。如果速度太慢,则对其进行分析以确定实际的性能瓶颈在哪里。如果分析告诉您此方法是一个重大瓶颈,请考虑对其进行处理……否则,请不要理会它。

于 2012-08-28T09:51:09.033 回答