【发布时间】:2013-04-29 15:47:33
【问题描述】:
我正在 ARM 设备上使用实时应用程序。性能很重要,所以我使用了一个通用的 ObjectPool 类。
到目前为止,我会将池预分配到我可以预期的最大大小,但现在我遇到了绝对必须调整池大小的情况。
查看了网络和 SO 的许多解决方案后,我注意到调整大小始终是触发 GC 的数组复制操作。我认为这没问题,但现在开始看到性能影响确实很重要。
是否有真正的可调整大小的对象池解决方案/模式可以产生零垃圾?
【问题讨论】:
-
如果您绝对必须拥有零垃圾,那么 ObjectPool 实例的链表或树可能会起作用。但是,您可能会失去任何实时保证。 (找到一个实例至少可以变成一个线性或对数时间操作。)“调整大小”数组只是创建一个新数组(要求最终收集旧数组),而典型池的核心将是一组实例引用...因此您需要创建一个新池而不是调整现有池的大小。
标签: c# .net garbage-collection arm