创建许多对象并回收它们
本文关键字:多对象 创建 | 更新日期: 2023-09-27 18:02:54
我想创建一个类,允许我拥有许多对象并将它们存储在一个数据结构中。这些对象将从列表中出来做一些事情,然后放回列表中。在程序执行过程中,这个循环将为这个列表中的不同对象重复多次。
我对两个方面很感兴趣:
- 有效地创建/构建许多对象
- 不断使用
现在对象是这样创建的:
for(int i = 0; i < NUMBER; i++)
new WhitePlate(0,2,5);
是否有一种设计模式可以使这变得容易?我在想,从我读到的,工厂设计模式或构建器会做的把戏,我应该使用哪个。
当我必须创建许多对象并将它们保存在数据结构中时,您建议我使用哪种设计模式?
我将使用的数据结构是微不足道的,无关紧要,但我将使用哈希。
你在问题中描述的是一个对象池
对象池并非完全没有先例。我见过它们在Java程序中使用,其目标是消除垃圾收集压力。它们的工作方式是创建一个普通的集合,用对象填充该集合,然后,不是调用new
,而是从集合中抓取一个未使用的对象。
这是否会帮助您的特定程序是一个悬而未决的问题。您必须尝试常规方法和对象池方法,运行一些测试,看看哪种方法效果更好。不用说,对象池将使用更多的内存,但是内存使用总量变化会小得多。
Prototype是一个创建模式,如果您的对象单独创建成本很高,它可能会有所帮助。另一种选择是代理模式,它通过创建占位符对象(代理对象)来推迟昂贵对象的创建,直到需要真正的对象;延迟加载的例子。
但是你说你的数据结构是微不足道的,所以以上两种方法都不适用:即使是代理也不能在做许多单独琐碎的内存分配时避免冻结UI。正如一位评论者建议的那样,您可以使用延迟加载来最小化许多对象构造的影响。所以,如果你在启动时需要1000个对象,但这太慢了,那就重新设计UI,让它看起来和行为像正常的一样,只有100个对象。那么你只需要在启动时构造100个对象;其余的可以稍后构造。
"later"是什么时候?你有一些选择:
- 。当用户操作UI时,根据需要构造对象。
- 自动但延迟的构造。这可能是应用程序在启动和UI完全显示之后第一次发出空闲信号- OnIdle事件。这个事件在一个应用程序的生命周期内会被触发很多次,所以很明显你需要检查这些事件中的第一个。
另一种可能性是在一个后台线程上构造所有1000个对象,允许UI线程在渲染初始UI状态时自由地做最小的工作。但是,如果您不需要在初始阶段显示1,000个对象中的任何一个,这可能只是一个选项。
最后,还有网络上的资源,例如: