C# 中的 for 和 while 循环

2024-02-07

for (i=0 ; i<=10; i++)
{
    ..
    ..
}

i=0;
while(i<=10)
{
    ..
    ..
    i++;
}

for 和 while 循环,哪个性能更好?


(更新) 实际上 - 有一种情况for构建更高效;在数组上循环。编译器/JIT 针对这种情况进行了优化只要你使用 arr.Length 在条件下:

for(int i = 0 ; i < arr.Length ; i++) {
    Console.WriteLine(arr[i]); // skips bounds check
}

在这种非常特殊的情况下,它会跳过边界检查,因为它已经知道它永远不会越界。有趣的是,如果你“举起”arr.Length要尝试手动优化它,可以防止这种情况发生:

int len = arr.Length;
for(int i = 0 ; i < len ; i++) {
    Console.WriteLine(arr[i]); // performs bounds check
}

但是,对于其他容器(List<T>等),作为手动微优化,提升是相当合理的。

(更新结束)


两者都不;无论如何,for 循环在底层都会被评估为 while 循环。

例如,ECMA 334(明确赋值)的 12.3.3.9 规定 for 循环:

for ( for-initializer ; for-condition ; for-iterator ) embedded-statement

本质上是等价的(从明确的任务透视图(与“编译器必须生成此 IL”不太一样))为:

{
    for-initializer ;
    while ( for-condition ) {
        embedded-statement ;
        LLoop:
        for-iterator ;
    }
}

带有目标的 continue 语句 for 语句被翻译为 针对标签的 goto 语句 循环。如果省略 for 条件 从 for 语句中,然后 明确分配的评估 如同 for-condition 一样进行 将上面的内容替换为 true 扩张。

现在,这并不意味着编译器必须做完全相同的事情,但实际上它几乎是这样做的......

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

C# 中的 for 和 while 循环 的相关文章

  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 只返回 $.ajax 传递的 JSON 数据的前 20 个结果?

    我有以下简单的 jquery 片段 document ready function ajax url myjson json dataType json success function json each json function al
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • 如何迭代 Array.prototype 函数

    我想将所有数组函数包装在数组对象中 但在控制台中 gt gt gt Array prototype gt gt gt prototype undefined 但是当我输入时Array prototype在控制台中它显示自动完成中的所有功能
  • System.Diagnostics.Trace.WriteLine 的结果在哪里?

    在我的代码中 我使用以下命令编写了一些跟踪消息System Diagnostics Trace WriteLine 但是我可以从哪里获取消息呢 我查看了事件查看器 但没有找到它们 Are you debugging Look at the
  • 将 Google Maps JS API ImageMapType 剪辑为多边形

    如何将 Google 地图中的 MapType 剪辑为任意多边形 例如 如果我有一个自定义图像映射类型 https developers google com maps documentation javascript maptypes I
  • Typescript:调用另一个类的“方法”

    我对 java type script 很陌生 在理解它们的概念时遇到了一些困难 我想打电话给method另一个班级的 然而 到目前为止我还没有成功 export class Foo calcSomeThing parameter numb
  • 如何仅使用 javascript 更改 onclick 按钮颜色?

    我试图使用 onclick 和 getElementsByClassName 更改按钮的颜色 并想出了这样的结果 HTML
  • Android 2.3 Webview 中的希伯来字体

    我正在将一个显示希伯来语的应用程序移植到 Android 2 3 2 3 模拟器在 TextView 中正确显示字符串 但是当我尝试将字符串放入 WebView 中时 WebView 只显示乱码 这告诉我希伯来语字体在模拟器中可用 但 we
  • 执行更新时存储过程失败

    我正在使用 PHP 的 SQL Server 驱动程序连接到 SQL Server 2008 Express 现在 我正在尝试用存储过程替换所有 SELECT UPDATE 和 INSERT 语句 这对于只包含 SELECT 语句的 SP
  • 将 Ninject 2.0 与 ASP .Net 3.5 结合使用

    我正在尝试将 Ninject 2 0 与 Asp Net 3 5 Web 应用程序一起使用 以下是 DLLS 及其我正在使用的版本 Ninject dll v2 0 0 0 Ninject Extensions Logging dll v2
  • 对象作为 python 字典中的键

    我试图使用一个对象作为 python 字典中的键 但它的行为方式我不太理解 首先 我创建一个以我的对象为键的字典 package disseminators ContentType application zip http other pr
  • 如何知道下次夏令时调整时钟的时间?

    我很好奇 是否有任何方法可以找出下一次夏令时调整发生时的 UTC 日期 时间 类似于 Windows 报告的内容 参见圆圈 此信息在 Windows 中由 EnumDynamicTimeZoneInformation 函数提供 See ht
  • 从 DataRow 获取值之间的区别

    示例代码 DataTable table new DataTable insert column to table table Columns Add name insert value to table foreach DataRow r
  • 如何处理语义分割中未知类的平均交集(mIOU)?

    我实现了一个 FCN 网络来进行语义分割 我使用 Cityscapes 作为我的数据集 如您所知 Cityscapes 中有一些您在训练过程中忽略的类 它们被标记为 255 我使用加权损失来忽略未知类的损失 将未知类的损失设置为零 现在我想
  • DrawerNavigator 在点击每个选项时始终显示选项卡栏

    我试图拥有一个选项卡栏 并且每个选项卡栏都有自己的堆栈导航器 我拥有的三个选项卡是 家 轮廓 设置 我也想在抽屉里展示这三个选项 我创建了一个抽屉 但只有点击主页才会显示选项卡栏 我想显示选项卡栏 就像您按下个人资料选项卡一样 选项卡栏仍保
  • click() 带有链接

    我有一个页面 其中有一些链接 都是这样的 a href class answer item 10 a 我想使用click 函数来模拟用户点击其中一个 但它在我的测试中似乎不起作用 Evaluate a mathematical expres
  • Symfony3 Facebook 登录 - redirect_uri URL 转换为相对地址

    我正在尝试为网络应用程序实现 facebook 登录 这是 FacebookConnect php
  • 如何获取两列组合的最后一条记录?

    我遇到的情况我认为可以与 CamelCamelCamel Keepa 等服务进行比较 假设我每天跟踪几个国家 地区的一篇文章的价格 所以我的桌子 我们称之为Trend 看起来像这样 Id Created ArticleId Country
  • 使用 GridView 在 Yii2.0 中显示过滤器的空白行

    我已经设置 GridView 在 Yii2 0 中创建我的表 如下所示
  • Windows SDK 7.1 安装失败

    我正在尝试使用 NET Framework 4 安装适用于 Windows 7 的 Windows SDK 但是当我打开安装程序时收到错误 某些 Windows SDK 组件需要 RTM NET Framework 4 设置 检测到 NET
  • Hadoop 中未找到类异常

    我正在尝试运行一个 hadoop 单单元程序来进行字数统计 我在 Windows 10 64 位和 Cygwin 上执行此操作 这是我正在使用的程序 import java io IOException import java util S
  • C# 中的 for 和 while 循环

    for i 0 i lt 10 i i 0 while i lt 10 i for 和 while 循环 哪个性能更好 更新 实际上 有一种情况for构建更高效 在数组上循环 编译器 JIT 针对这种情况进行了优化只要你使用 arr Len