虽然出于很多充分的理由我当然鼓励您从非泛型集合转移到泛型集合,但老实说,我怀疑这些集合可能是您的性能问题的原因。拳击通常只有在您达到微观水平时才会成为问题,需要在高性能情况下挤出微小的收益。出于 GC 的原因,通常避免这种情况也很好,但在那个领域通常也是次要的。
换句话说:装箱会导致您的用户会注意到的性能问题,这是非常值得怀疑的。
显然,我是在概括地说。在不知道你的具体情况的情况下,我真的不能肯定地说那么多。
编辑:请注意,虽然我怀疑您的问题可能是您使用非泛型集合本身,但我会指出,您使用什么类型的集合来解决给定问题非常重要,特别是当数据量在收藏品很大。这里只是几个例子:
- 例如,如果您正在基于键执行查找,则诸如哈希表之类的哈希表
Dictionary<TKey, TValue>
将显着优于List<T>
。
- 如果您正在检查重复项,则 a
HashSet<T>
将具有出色的性能。
- 如果您正在寻找FIFO(类似队列)的行为,a
Queue<T>
将具有卓越的性能。
- 如果您在集合中的随机位置执行插入/删除,a
LinkedList<T>
将具有卓越的性能。
这些集合应该是任何 .NET 开发人员(实际上是任何开发人员)工具集的一部分。如果您发现自己在使用项目集合的任何地方都使用List<T>
(或ArrayList
)或类似的数据结构,那么这很可能会导致性能问题 - 再次强调,尤其是当您的集合很大时。这些并不是我所说的微不足道的性能提升。所以请注意为您的收藏类型做出明智的选择。
但我一般会推荐一个性能分析器,例如ANTS(很好,但不是免费的)或EQATEC(也很好而且免费)。只需在其中一个程序下运行您的应用程序,然后查看您的瓶颈在哪里。我的猜测是你会发现它与你的非通用集合无关。但很自然,我可能是错的。