当前位置:  开发笔记 > 编程语言 > 正文

在c#中迭代堆栈的最快方法

如何解决《在c#中迭代堆栈的最快方法》经验,为你挑选了4个好方法。

我觉得使用GetEnumerator()和强制IEnumerator.Current很昂贵.有更好的建议吗?

如果它提供具有更好性能的类似功能,我愿意使用不同的数据结构.

经过深思熟虑:
通用堆栈是一个更好的主意,以便不需要演员吗?



1> Marc Gravell..:

Stack(与foreach一起)确实可以拯救演员阵容,但实际上拳击在宏伟的计划中并不是那么糟糕.如果您遇到性能问题,我怀疑这是您可以增加很多价值的领域.使用分析器,并专注于实际问题 - 否则这是不成熟的.

请注意,如果您只想读取一次数据(即您很乐意使用堆栈),那么这可能会更快(避免枚举器的开销); 因人而异.

    Stack stack = null;
    while (stack.Count > 0)
    {
        T value = stack.Pop();
        // process value
    }



2> Mats Fredrik..:

你做过任何基准测试,还是仅仅是直觉?

如果您认为大部分处理时间都花在循环堆栈上,那么您应该对其进行基准测试,并确保情况确实如此.如果是,您有几个选择.

    重新设计代码,以便不需要循环

    找到一个更快的循环结构.(我会推荐泛型,即使它没那么重要.再次,做基准测试).

编辑:

当您尝试在列表中进行查找或匹配两个列表或类似列表时,可能不需要的循环示例.如果循环需要很长时间,请查看将列表放入二叉树或哈希映射是否有意义.可能存在创建它们的初始成本,但是如果重新设计代码,则可以通过稍后进行O(1)查找来获得该代码.



3> csgero..:

是的,使用通用堆栈将节省演员阵容.



4> Timothy Khou..:

如果您需要堆栈的功能(与列表或其他类型的大学有关),则可以,请使用通用堆栈。这将加快速度,因为编译器将在运行时跳过强制转换(因为它在编译时是必需的)。

Stack stacky = new Stack();

foreach (MyClass item in stacky)
{
    // this is as fast as you're going to get.
}

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有