gpt4 book ai didi

java - 需要减少对象创建的解决方案,使用了spring - 但有问题,方法详细解释

转载 作者:行者123 更新时间:2023-12-02 00:45:15 24 4
gpt4 key购买 nike

我使用 spring 来减少新对象的创建,对于可用结果集的数量,我将在内部创建一个行对象,并将该行对象添加到一个行集对象中,该对象维护一个行列表。

我的代码是这样的。

 while(rs.next()) {
Row r = new Row();
//Logic
rowset.addRow(r);
}

我的 rs 至少有 3000 行,因此将注入(inject) 3000 行对象,所以为了避免它,我使用了 spring 注入(inject)

 while(rs.next()) {
Row r = (Row)getApplicationContext().getBean("row");
//Logic
rowset.addRow(r);
}

但这里的问题是,当第二行对象添加到行集中时,第一行对象的值将被第二行对象覆盖,并且当添加最后一行时,所有 1 到最后 1 行对象值将更新为最后一行对象值。

这是我的行集类

public class RowSet {
private ArrayList m_alRow;
public RowSet() {
m_alRow = new ArrayList();
}
public void addRow(Row row) {
m_alRow.add(row);
}
}

我需要一个解决方案,以便避免在 while 循环内创建新的行对象,并涉及相同的逻辑。

最佳答案

Spring 注入(inject)不是你的答案。在内存中保存 3,000 行并不能避免任何问题。无论您调用“new”来创建它们还是 bean 工厂创建它们,您都会消耗相同的 RAM。

我会问为什么你需要同时在内存中存储 3,000 行。我可以看到哪里可能需要更小的数据,或者可能要求数据库服务器将它们压缩成可用的数据,而不是将所有数据拖到中间层。

我会重新考虑你的设计。

RowSet 可能是持久层的一个很好的抽象,但我在这里没有看到任何业务对象。你用这些数据做什么?最终如何消耗?

如果您只是将其发送到用户界面进行显示,则应该遵循 Google 的示例。 Google 可能会收到数百万条针对您的查询的回复,但它一次只会向您显示 25 个回复,最好的答案会先出现。他们打赌,如果第一个结果满足您的需求,您将不需要这百万个结果中的其余部分。也许您也需要尝试解决您的问题。

关于java - 需要减少对象创建的解决方案,使用了spring - 但有问题,方法详细解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5167270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com