为什么第二个 for 循环总是比第一个循环执行得快?

2023-11-24

我试图弄清楚 for 循环是否比 foreach 循环更快,并使用 System.Diagnostics 类来计时任务。在运行测试时,我注意到我放在第一个循环的执行速度总是比最后一个循环慢。有人可以告诉我为什么会发生这种情况吗?我的代码如下:

using System;
using System.Diagnostics;

namespace cool {
    class Program {
        static void Main(string[] args) {
            int[] x = new int[] { 3, 6, 9, 12 };
            int[] y = new int[] { 3, 6, 9, 12 };

            DateTime startTime = DateTime.Now;
            for (int i = 0; i < 4; i++) {
                Console.WriteLine(x[i]);
            }
            TimeSpan elapsedTime = DateTime.Now - startTime;

            DateTime startTime2 = DateTime.Now;
            foreach (var item in y) {
                Console.WriteLine(item);
            }
            TimeSpan elapsedTime2 = DateTime.Now - startTime2;

            Console.WriteLine("\nSummary");
            Console.WriteLine("--------------------------\n");
            Console.WriteLine("for:\t{0}\nforeach:\t{1}", elapsedTime, elapsedTime2);

            Console.ReadKey();
      }
   }
}

这是输出:

for:            00:00:00.0175781
foreach:        00:00:00.0009766

可能是因为类(例如 Console)第一次需要进行 JIT 编译。您将通过首先调用所有方法(对它们进行 JIT(预热然后启动))然后执行测试来获得最佳指标。

正如其他用户所指出的,4 次传递永远不足以向您展示差异。

顺便说一句,for 和 foreach 之间的性能差异可以忽略不计,并且使用 foreach 的可读性优势几乎总是超过任何边际性能优势。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么第二个 for 循环总是比第一个循环执行得快? 的相关文章

  • 检查数据库中是否存在记录

    我正在使用这些代码行来检查记录是否存在 SqlCommand check User Name new SqlCommand SELECT FROM Table WHERE user txtBox UserName Text conn int
  • 如何将动态数据写入 MVC 3 Razor 中的页面布局?

    我有带有 Razor 引擎的 MVC 3 C 项目 将动态数据写入 Layout cshtml 的方法和最佳实践是什么 例如 也许我想在网站的右上角显示用户名 该名称来自会话 数据库或基于用户登录的任何内容 更新 我也在寻找将某些数据渲染到
  • 如何在 Asp.Net Core 6 中向类型化 HttpClient 添加承载令牌身份验证

    我正在尝试使用 ASP Net Core 6 设置一个 Web api 以便用户可以到达我的端点 然后我使用特权帐户在幕后的 D365 中执行一些工作 我正在使用类型化的 HTTP 客户端 但我不确定如何插入承载身份验证 以便来自该客户端的
  • 为什么迭代器类型推导失败? [复制]

    这个问题在这里已经有答案了 为什么这在 C 中不起作用 为什么我不能限制foo的参数为std vector
  • ASP.NET 如何在 Web API 中读取多部分表单数据?

    我将多部分表单数据发送到我的 Web API 如下所示 string example my string HttpContent stringContent new StringContent example HttpContent fil
  • 为基于架构的 XML 文件创建 WPF 编辑器

    这是场景 我们的服务器产品之一使用大型 XML 配置文件 该文件的布局相当好 并且针对 XSD 文件进行了验证 现在是时候构建一个配置 GUI 来维护这个文件了 我想深入研究 WPF 来完成它 我可以为每个配置部分布置一个单独的表单 每次向
  • 如何将 mat 转换为 array2d

    我为dlib http dlib net face landmark detection ex cpp html那里的面部地标代码使用 array2d 来获取图像 但我喜欢使用 Mat 读取图像并转换为 array2d 因为 dlib 仅支
  • 公共基类打破了元组的空基类优化

    gcc 4 7 1 对元组进行空基类优化 我认为这是一个非常有用的功能 然而 这似乎有一个意想不到的限制 include
  • 我如何模拟 UserManager 和 RoleManager 进行单元测试

    我模拟了抽象类来测试类的具体方法 如下所示 var mock new Mock
  • Bazel:将编译标志添加到默认 C++ 工具链

    我想向默认的 C 工具链添加一些编译器和链接器标志 以便我构建的所有目标 本地或导入 共享它们 我知道可以定义我自己的工具链 但我不想这样做 因为它非常复杂且容易出错 理想情况下我想要这样的东西 cc toolchain cc defaul
  • 这个元组创建习惯有名字吗?

    On the 增加邮件列表 http lists boost org Archives boost 2014 06 214213 php LouisDionne 最近发布了以下创建类似元组的实体的巧妙技巧 include
  • 使用 C# 的异步 WebRequest

    您好 我有一个函数 它将 url Get 参数传递到网络服务器上的 php 文件 并等待文件的响应 通常需要 10 20 秒 我想将其放入一个循环中 因为我必须一次将这些 Get 请求发送到大约 5 个不同的 php 文件 但是当我尝试将其
  • C# 中的类和模块有什么用

    有人可以解释一下类和模块之间的区别吗 你什么时候使用其中一种而不是另一种 我正在使用 C 更新 我的意思是相当于 VB 模块的 C 版本 这在很大程度上取决于您所指的 模块 Visual Basic 的模块 C 中没有真正等效的 VB Ne
  • 在 boost 元组、zip_iterator 等上使用 std::get 和 std::tie

    我有哪些使用选择std get lt gt and std tie lt gt 与增强结构一起 例子 我想使用基于范围的 for 循环在多个容器上进行迭代 我可以实施zip函数 它使用boost zip iterator include
  • 为什么将未使用的返回值转换为 void?

    int fn void whatever void fn 是否有任何理由将未使用的返回值强制转换为 void 或者我认为这完全是浪费时间 David s answer https stackoverflow com questions 68
  • 没有 FPU 的处理器中的浮点计算

    是否可以在没有浮点单元的嵌入式处理器中执行浮点运算 是的 您只需要在软件中完成即可 你的编译器可能会提供支持 http gcc gnu org onlinedocs gccint Soft float library routines ht
  • 提升shared_from_this<>()

    有人可以用几句话概括一下如何提升shared from this lt gt 应该使用智能指针 特别是从使用绑定函数在 io service 中注册处理程序的角度来看 编辑 一些回复要求提供更多背景信息 基本上 我正在寻找 陷阱 即人们使用
  • 如何在c#中获取斐波那契数

    伙计们 我有一个关于斐波那契的问题 如何获得斐波那契数列 该数字也将以用户输入结束 例如 如果我输入 21 则输出必须为 0 1 1 2 3 5 8 13 21 这是我的代码 static void Main string args int
  • Cordova 上的 ClearCookiesAsync()

    我正在尝试使用 wp8 cordova 中的插件来清除 WebBrowser cookie 我已经让它与 JavaScript 进行通信 并且我的 c 文件中有类似这样的内容 using WPCordovaClassLib Cordova
  • 从最大到最小的3个整数

    我是 C 初学者 我使用 编程 使用 C 的原理与实践 第二版 问题如下 编写一个程序 提示用户输入三个整数值 然后以逗号分隔的数字顺序输出这些值 如果两个值相同 则应将它们排列在一起 include

随机推荐

  • 面向对象的c++ win32?

    我想创建自己的类来处理创建窗口和窗口过程 但我注意到窗口过程必须是静态的 我现在想知道是否可以使窗口过程面向对象 我读过一些关于面向对象窗口的教程 但它们总是使过程静态 那有什么用 任何有关如何解决此问题的链接或信息将不胜感激 thanks
  • 如何在数据库中存储图像的位置?

    我有一个颜色列表 其中包含我想要向特定用户显示的纹理 因此我需要加载特定用户拥有的颜色的图像 颜色的信息包含在 ObjecDTO 中 其中一个属性是其图像小路 我的问题是我应该如何在数据库中存储图像路径 是否有任何特殊规则 例如 由于数据库
  • Spring Batch“默认”上下文变量是什么?

    In the 春季批次步进范围文档 存在三个无法解释的 spring batch 上下文映射 jobParameters jobExecutionContext and stepExecutionContext Springsource示例
  • MVC 自定义路由中的多个级别

    我正在尝试构建自己的小cms 我创建了一个抽象 pageBase 类 由 Static Reviews Articles News 继承 每个都有自己的控制器方法 我的问题是我需要允许管理员定义他自己的自定义路径级别 例如 news loc
  • 从字符串中提取格式不一致的日期(日期解析,NLP)

    我有一个很大的文件列表 其中一些文件名中嵌入了日期 日期的格式不一致且通常不完整 例如 Aug06 Aug2006 August 2006 08 06 01 08 06 2006 011004 等 除此之外 某些文件名具有不相关的数字 看起
  • 多线程和多进程的性能差异

    几年前 在Windows环境下 我做了一些测试 让CPU计算密集型 内存访问密集型 I O访问密集型应用程序的多个实例运行 我开发了2个版本 一个是在多处理下运行 另一个是在多线程下运行 我发现多处理的性能要好得多 我在其他地方读过 但我不
  • window.history.back() 不起作用。

    我无法让它发挥作用 我已经尝试了很多年了 请帮我
  • 带有 AVAudioConverterInputBlock 的 AVAudioConverter 在处理后会出现音频断断续续的情况

    我正在尝试将音频缓冲区转换为不同的格式 并且我正在使用 AVAudioConverter 当您具有相同的采样率并且不需要使用 AVAudioConverterInputBlock 时 AVAudioConverter 会完成这项工作 但如果
  • 查找 CSS 未应用的规则

    我有一个很大的 CSS 样式表 大约 6500 行 有什么方法可以确定哪些规则不适用于给定页面 firefox 插件 Web 实用程序或其他东西 Thanks PD 使用 Firebug 我可以找到哪些规则适用 但我无法找到哪些规则不适用
  • 有人可以在休眠状态下向我解释一下@MapsId吗?

    有人可以向我解释一下吗 MapsId冬眠时 我很难理解它 如果能用一个例子来解释它 以及它最适用于哪种用例 那就太好了 这是一个很好的解释对象数据库 指定为 EmbeddedId 主键 EmbeddedId 主键内的属性或父实体的简单主键提
  • 在for循环中使用@ref来获取元素引用

    我试图在不同的地方获取同一对象的位置 其中 使用 javascript 函数 我应该得到不同的顶部位置 但这不是场景 脚本代码 Index razor代码 inject IJSRuntime jsRuntime div for int i
  • 列出目录中具有特定扩展名的所有文件

    假设我想列出所有php目录中的文件 包括子目录 我可以在 bash 中运行 ls l find name php type f 这样做的问题是 如果没有php文件 执行的命令是ls l 列出所有文件和目录 而不是没有 这是一个问题 因为我试
  • iPhone/桌面应用程序的相同代码库

    我有一个 iPhone iPad 应用程序 我想将其移植到 MacOSX 我的大多数目标 C 类只要不包含 UIKit 内容就应该可以正常工作 显然 界面会有所不同 在 Xcode 中执行此操作的最佳方法是什么 开始一个全新的项目 添加新目
  • 如何在按键时获得本地化字符?

    我需要得到本地化字符 on keypress事件 例如 在捷克语键盘上 我需要输入 而不是 5 个字符 键码 53 请参阅捷克语键盘布局 有没有其他方法来获取字符而不使用文本输入和读取值 换句话说 有什么方法可以从事件对象中获取符合当前用户
  • 如何显示从 axios 请求返回的图像(React)?

    我正在使用 React 开发一个谷歌地图项目 我为 onClick 处理程序分配以下方法 getStreetView lat lng let url https maps googleapis com maps api streetview
  • 如何在onKeyPress期间获取输入文本框的文本?

    我试图在用户输入文本时获取文本框中的文本 jsfiddle游乐场 function edValueKeyPress var edValue document getElementById edValue var s edValue valu
  • 如何从 docker 容器“avahi 浏览”?

    我正在运行一个基于 ubuntu 14 04 的容器 并且我需要能够使用avahi browse在里面 然而 env root 8faa2c44e53e opt cluster manager avahi browse a Failed t
  • PDO PHP bindValue 不起作用

    我知道这个问题已经被问了 1000 次了 但出于某种原因 我继续用头撞墙 这有效 sql SELECT a eventCode a eventTime a teamCode a playerCode b lastName b firstNa
  • 将 ImageView 中的图像保存到设备图库

    我正在尝试将图像从 ImageView 保存到设备库 我试过这段代码 代码编辑 URL url new URL getIntent getStringExtra imageURL File f new File url getPath ad
  • 为什么第二个 for 循环总是比第一个循环执行得快?

    我试图弄清楚 for 循环是否比 foreach 循环更快 并使用 System Diagnostics 类来计时任务 在运行测试时 我注意到我放在第一个循环的执行速度总是比最后一个循环慢 有人可以告诉我为什么会发生这种情况吗 我的代码如下