我觉得使用GetEnumerator()和强制IEnumerator.Current很昂贵.有更好的建议吗?
如果它提供具有更好性能的类似功能,我愿意使用不同的数据结构.
经过深思熟虑:
通用堆栈是一个更好的主意,以便不需要演员吗?
Stack
(与foreach一起)确实可以拯救演员阵容,但实际上拳击在宏伟的计划中并不是那么糟糕.如果您遇到性能问题,我怀疑这是您可以增加很多价值的领域.使用分析器,并专注于实际问题 - 否则这是不成熟的.
请注意,如果您只想读取一次数据(即您很乐意使用堆栈),那么这可能会更快(避免枚举器的开销); 因人而异.
Stackstack = null; while (stack.Count > 0) { T value = stack.Pop(); // process value }
你做过任何基准测试,还是仅仅是直觉?
如果您认为大部分处理时间都花在循环堆栈上,那么您应该对其进行基准测试,并确保情况确实如此.如果是,您有几个选择.
重新设计代码,以便不需要循环
找到一个更快的循环结构.(我会推荐泛型,即使它没那么重要.再次,做基准测试).
编辑:
当您尝试在列表中进行查找或匹配两个列表或类似列表时,可能不需要的循环示例.如果循环需要很长时间,请查看将列表放入二叉树或哈希映射是否有意义.可能存在创建它们的初始成本,但是如果重新设计代码,则可以通过稍后进行O(1)查找来获得该代码.
是的,使用通用堆栈将节省演员阵容.
如果您需要堆栈的功能(与列表或其他类型的大学有关),则可以,请使用通用堆栈。这将加快速度,因为编译器将在运行时跳过强制转换(因为它在编译时是必需的)。
Stackstacky = new Stack (); foreach (MyClass item in stacky) { // this is as fast as you're going to get. }