c# - foreach 和集合的使用速度慢吗?

标签 c# winforms performance collections foreach

我正在重构我的应用程序以使其更快。我正在寻找这样做的技巧,并找到了这个声明:

“ForEach 可以简化 For 循环中的代码,但它是一个重对象并且比使用 For 编写的循环慢。”

这是真的吗?如果它在编写时是正确的,那么今天是否仍然正确,或者 foreach 本身是否已被重构以提高性能?

我对同一来源的提示有同样的问题:

“尽可能使用数组而不是集合。数组通常更有效,尤其是对于值类型。此外,尽可能将集合初始化为所需的大小。”

更新

我一直在寻找性能提示,因为我有一个需要几秒钟的数据库操作。

我发现“using”语句很浪费时间。

我通过反转 for 循环和“使用”完全解决了我的性能问题(当然,重构是必要的)。

比糖蜜慢的代码是:

for (int i = 1; i <= googlePlex; i++) {
    . . .
    using (OracleCommand ocmd = new OracleCommand(insert, oc)) {
    . . .
    InsertRecord();
    . . .

比子弹还快的代码是:

using (OracleCommand ocmd = new OracleCommand(insert, oc)) {
    for (int i = 1; i <= googlePlex; i++) {
        . . .
        InsertRecord();
        . . .

最佳答案

简答:

难以阅读的代码最终会导致软件行为和性能不佳。

长答案:

早期的 .NET 中存在微优化建议文化。部分原因是一些 Microsoft 的内部工具(例如 FxCop)在公众中广受欢迎。部分原因是因为 C# 曾经并且一直渴望成为汇编、C 和 C++ 的继承者,因为它可以在性能关键型应用程序的几个 HitTest 门代码路径中不受阻碍地访问原始硬件性能。当然,这确实需要比典型应用程序更多的知识和纪律。框架代码和应用程​​序代码中性能相关决策的结果也大不相同。

当然,这对 C# 编码文化的净影响是积极的;但是停止使用 foreachis"" 只是为了保存一些你最近的抖动可能会出现的 CIL 指令是荒谬的如果需要,可以完全优化。

您的应用程序中可能有很多循环,并且可能至多其中一个可能是当前的性能瓶颈。以牺牲可读性为代价来“优化”非瓶颈的性能是非常糟糕的交易。

关于c# - foreach 和集合的使用速度慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10689140/

相关文章:

c# - 从数据集中获取单个值的最佳方法是什么?

c# n-ary树的深拷贝

c# - C# 中线程仍在运行

c# - 在 C# .NET 中设置最小窗口大小

c# - 在 C# 中手动填充 DataTable 的最快方法

c# - 从 LINQ 数据库查询中的整数返回枚举名称

c# - 从 WPF 应用程序注销 Azure Active Directory 应用程序?

Java NIO 从一个套接字读取并写入另一个套接字的固有缺陷?

c# - 如何在 .NET 的 Windows 窗体中打开新窗口?

c++ - OpenCV Python 通过图像数据绑定(bind)非常慢的迭代