创建许多对象并回收它们

时间:2014-05-12 03:40:31

标签: c# design-patterns

我想创建一个允许我拥有许多对象并将它们存储在数据结构中的类。这些对象将从列表中取出然后放回到列表中。在执行程序期间,此循环将重复多次,以便始终在此列表中显示不同的对象。

我对两个方面非常感兴趣:

  1. 有效地创建/构建多个对象
  2. 不断使用
  3. 目前创建的对象如下:

    for(int i = 0; i < NUMBER; i++)
       new WhitePlate(0,2,5);
    

    是否有一种设计模式可以让这更容易?我在想,从我读到的,工厂设计模式或构建器可以解决这个问题,我应该使用它。

    当我必须创建多个对象并将它们保存在数据结构中时,您建议我使用哪种设计模式?

    我将使用的数据结构是微不足道的,并不重要,但我将使用哈希。

2 个答案:

答案 0 :(得分:2)

您在问题中描述的是对象池。

对象池并不是前所未有的。我已经看到它们在Java程序中使用,其目标是消除垃圾收集压力。它们通过创建普通集合,用对象填充该集合,然后而不是调用{{}来工作。 1}},你只需从集合中抓取一个未使用的对象。

这是否有助于您的特定计划是一个悬而未决的问题。您必须以传统方式和对象池方式尝试它,运行一些测试,并查看哪种方式更好。毫无疑问,对象池将使用更多内存,但内存使用总量的变化要小得多。

答案 1 :(得分:0)

Prototype是一种创建模式,如果您的对象单独创建昂贵,可能会有所帮助。另一种方法是代理模式,它通过创建占位符对象(代理对象)来延迟创建昂贵的对象,直到需要真实对象为止; 延迟加载的一个例子。

但是你说你的数据结构是微不足道的,所以上述两者都不适用:甚至代理也可以避免在执行许多单独的简单内存分配时冻结UI。您可以使用延迟加载来最小化许多对象构造的影响,如评论者所建议的那样。因此,如果您在启动时需要1,000个对象,但速度慢得令人无法接受,请重新设计UI,使其外观和行为与正常情况相同,只有100个对象。然后你只需要在启动时构建100个对象 ;其余的可以在以后构建。

以后是什么时候&#39;?你有一些选择:

  • 按需提供。当用户操纵UI时,根据需要构造对象。
  • 自动但延期施工。这可能是应用程序首次发出信号表明它处于空闲状态 - OnIdle事件 - 启动后并且UI已完全显示。此事件在应用程序生命周期中多次提升,因此显然您需要检查第一个事件。

另一种可能性是在后台线程上构造所有1,000个对象,允许UI线程在呈现初始UI状态时自由地完成最少的工作。但如果您不需要在初始阶段显示1,000个对象中的任何一个,这可能只是一个选项。

最后,网上有资源,例如。 MSDN杂志,关于缩短启动时间的一般指导原则,例如只创建所需的最小形式。