在性能关键代码中,我应该更喜欢 C# 中的变量还是数组的多重间接寻址?

2024-02-07

在某些性能关键的程序(单线程)中,如果我有原始类型的数组,并且需要在循环中多次访问这些数组的相同索引。

我应该使用 tmp 变量,还是只是数组上的常量间接寻址会更好/更快?

我还可以想象,两者都可能是相同的/在编译时透明地进行了优化。


让我们测试一下:

  int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7};
  int t = arr[3];
  int a = 0;
  var start = DateTime.UtcNow;
  for (int i = 0; i < 1000000000; i++)
  {
    a += t;
  }
  Console.WriteLine(a);
  Console.WriteLine(DateTime.UtcNow-start);
  a = 0;
  start = DateTime.UtcNow;
  for (int i = 0; i < 1000000000; i++)
  {
    a += arr[3];
  }
  Console.WriteLine(a);
  Console.WriteLine(DateTime.UtcNow - start);

Output:

-294967296
00:00:02.1925000
-294967296
00:00:03.4250000

是的,重复访问数组的速度较慢。

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

在性能关键代码中,我应该更喜欢 C# 中的变量还是数组的多重间接寻址? 的相关文章

随机推荐

  • 向后播放 CABasicAnimation 后 CALayer 消失

    我有一个 CALayer 并向其中添加了一个 CABasicAnimation 如下所示 circle CALayer circle frame CGRect x 0 y 0 width 100 height 100 circle back
  • 在 OpenIddict 中处理请求时发生未处理的异常

    所以 我正在尝试实现 OpenIddict 版本1 0 0 beta2 0580 with NET core 1 1我收到以下错误 An unhandled exception occurred while processing the r
  • 如何从上到下逐步显示 ImageView

    有没有办法从上到下逐步显示 ImageView 像这样 抱歉动画很糟糕 我对 android 动画不太熟悉 但一种 有点黑客 方法是将图像包装在ClipDrawable并为其设置动画level价值 例如
  • 在模板 Vue 中插入脚本标签

    我正在创建一个集成支付服务 支付服务为我提供了form里面有一个脚本标签 我想在我的组件模板中插入带有脚本标签的表单 但是 vue 不允许在模板中插入标签脚本 如何在模板组件中插入带有脚本标签的表单 结账表格支付服务
  • Asus MeMO Pad 没有驱动程序可以使用 eclipse 进行应用程序调试

    我有同样的问题 如下所示SO post https stackoverflow com questions 15029581 asus memo pad debug for android apps 我得到了一个新的 Asus Memo P
  • 如果数组为 NULL,则不会出现“未定义的偏移量”

    我不确定这是一个错误 所以任何人都可以告诉为什么如果您尝试访问未定义为 NULL 的数组的键 php 不显示通知吗 文件说 Converting NULL to an array results in an empty array 因此 访
  • 根据 WPF 中的 TextBox 文本属性启用/禁用按钮?

    我正在通过谷歌寻找代码 该代码可以根据文本框中的文本属性启用和禁用按钮 如果文本框有一些文本 则应启用按钮 否则应禁用按钮 我得到了一些代码 但是 xaml 中的代码 但没有 c 我无法理解它是如何工作的 请帮助我理解以下代码的行为
  • 我应该直接向新学习者教授 CSS 布局,还是应该先教如何使用表格进行布局,然后再教授如何进行无表格布局?

    我应该直接向新学习者教授 CSS 布局还是应该先教如何使用表格进行布局 然后再教 div CSS 之间我应该教什么HTML 还是 XHTML 两者是相同的 所以我应该直接从 XHTML 1 0 Strict 开始吗 您应该教他们使用 CSS
  • 如何用AVPlayer解析m3u文件

    我想从 m3u 文件头而不是 id3Tags 获取曲目信息 在AVPlayer的timedMetaData它只是提供了 id3Tag 解析的属性 如何使用 AVPlayer 从以下 m3u 文件中获取标题 艺术家 url 等 EXTM3U
  • 我可以关闭 System.Net.Mail 中的电子邮件地址验证吗?

    我正在尝试使用电子邮件与传真服务器软件通信 传真服务器将接受格式化的 SMTP 邮件并将其转换为传真并将其发送到收件人地址中定义的传真号码 已通过同一服务器从 Outlook 发送电子邮件对此进行了手动测试 这是我的问题 System Ne
  • 运行 Cucumber 测试时 Rails 应用程序的端口

    有没有办法在测试中获取在 Cucumber 测试期间运行 Rails 应用程序的端口 我尝试了 Capybara server port 但为零 Thanks 使用 selenium 驱动程序时 可以在以下位置找到该端口 Capybara
  • 如何在远程服务器上启动进程、断开连接,然后收集输出?

    我正在用 python 编写自动化代码来测试网络应用程序的行为 因此 我的代码需要能够在网络中的服务器上启动进程 脚本 例如 tcpdump 或 python 脚本 断开连接 运行其他进程 然后返回并关闭 评估之前启动的进程 我的网络是 W
  • 使用 Node.js 将 HTML 转为 PDF

    我正在寻找可打印的pdf我的网站网页的版本 就像是express render 仅将页面呈现为pdf 有谁知道有一个节点模块可以做到这一点 如果没有 您将如何实施 我见过一些方法谈论使用无头浏览器 例如phantom js 但不确定流程是什
  • 为什么这个facet_grid不删除列?

    你好 有这个数据集 tdat structure list Condition structure c 1L 3L 2L 1L 3L 2L 1L 3L 2L 1L 3L 2L 1L 3L 2L 1L 3L 2L 1L 3L 2L 1L 3L
  • NHibernate Linq 预加载与通用存储库

    目前 我们为所有实体使用通用存储库 该存储库公开 IQueryable 使用 NH3 linq 支持 然后我们的服务层使用该通用存储库来构建特定查询 我现在需要急切地加载一个关联 有什么方法可以公开 IQueryable 并传入可选的获取表
  • 如何从 iText 7 中的 pdf 页面获取文本位置

    我想找到 PDF 页面中的文本位置 我尝试过的是使用简单的文本提取策略通过PDF文本提取器获取PDF页面中的文本 我正在循环每个单词来检查我的单词是否存在 使用以下方法分割单词 var Words pdftextextractor Spli
  • 尝试在 Rails 3 中创建具有 habtm 关系的范围

    我正在尝试对活动记录进行基本搜索 但由于 has and belongs to many 关系而遇到麻烦 以下是我创建的记录和范围 Class Section lt lt ActiveRecord Base has and belongs
  • 将所有 .html 扩展名重定向到 .php

    我想更新网站上的所有页面以使用包含页脚和页眉 所以我必须将很多 html页面更改为 php 所以我正在寻找一种方法将所有以 html 结尾的页面重定向到相同的 url 但以 php 结尾 RewriteEngine On RewriteRu
  • UITableView 重新加载部分

    我只想重新加载一部分而不是整个表格 有没有什么方法UITableView tableView reloadData 用于加载全表 我想知道如何仅加载一个部分 因为表中有大量行 reloadSections 方法让我烦恼 因为我必须构造一些对
  • 在性能关键代码中,我应该更喜欢 C# 中的变量还是数组的多重间接寻址?

    在某些性能关键的程序 单线程 中 如果我有原始类型的数组 并且需要在循环中多次访问这些数组的相同索引 我应该使用 tmp 变量 还是只是数组上的常量间接寻址会更好 更快 我还可以想象 两者都可能是相同的 在编译时透明地进行了优化 让我们测试