|
|
1
4
首先,您的测试方式并不能真正给您带来性能差异的有用印象。10000项的迭代实在太短;您已经可以看到这一点,因为您的结果以微秒为单位。相反,您应该总是尝试从中获得几秒钟的时间。此外,您应该始终运行相同的测试 倍数 然后从中取出平均值。这样可以消除随机影响并获得更稳定的结果(另请参见 law of large numbers ). 但是的,迭代生成器函数可能会比列表慢。这是出于不同的原因:首先,当您从暂停执行的函数中获取项时,实际上会出现大量上下文切换。我不确定这对生成器函数有多优化,但您仍然必须以某种方式处理它们,因此您确实会受到惩罚。 第二,列表内部使用数组,根据需要动态调整大小。所以最后,当您在列表上迭代时,您在数组上迭代。您正在对内存中的一系列数字进行迭代。这将永远比其他任何事情都快。 最大的区别是内存方面,这应该使您考虑生成器函数而不是完整列表。创建列表时,您将快速生成所有项,将它们放入内存,然后再次快速迭代。但你也把它们 全部的 存储在内存中。因此,根据项目的数量,这可能意味着巨大的成本。特别是当你只需要访问一个项目一次时,这通常是不值得的。另一方面,生成器函数只需要一个项目的内存,所以从内存方面来说,这是非常有效的。 最后,虽然存在速度差异,但这可能不会有多大影响。很少有应用程序会因为您决定在某处使用生成器函数而变慢。更可能的是,应用程序的瓶颈在其他地方,最有可能是在I/O或网络操作中,所以在它成为问题之前,您真的不应该关心它。 |
|
|
2
0
简单的答案。 该列表使用大量内存,这会使缓存过载。该方法不会使用大量内存,因此在处理器的一级缓存中运行。至少有一种可能的解释。尤其是当你做了1000多个数字时。 |
|
|
3
0
这种差异还可能是因为下面使用了不同的枚举器。例如,IL用于枚举
IL用于迭代
如您所见,前者使用
进一步阅读
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |