为什么 C# 中结构体的推荐大小为 16 字节?

2024-01-04

我读了 Cwalina 书(有关 .NET 应用程序开发和设计的建议)。

他说,一个设计良好的结构体的大小必须小于 16 个字节(出于性能目的)。

到底是为什么呢?

而且(更重要的是)如果我运行 .NET 3.5(很快将成为 .NET 4.0),我可以拥有更大的结构并具有相同的效率吗?64 位应用程序Core i7 https://en.wikipedia.org/wiki/Intel_Core#Core_i7在 Windows 7 x64 下(这个限制是基于CPU/操作系统的吗)?

只是再次强调 - 我需要尽可能高效的结构。我尝试始终将其保留在堆栈中。该应用程序是多线程的,并且以亚毫秒间隔运行,并且该结构的当前大小为 64 字节。


您错误地引用了这本书(至少是第二版)。 Jeffrey Richter 指出,如果满足以下条件,值类型可以超过 16 个字节:

您不打算将它们传递给其他人 方法或将它们复制到或从 集合类。

另外 Eric Gunnerson 补充道(关于 16 字节限制)

使用本指南作为触发因素 更多调查。

结构体“大小必须小于 16 个字节”是不正确的。这一切都取决于使用情况。

如果您正在创建结构并使用它并且担心性能,那么请使用探查器比较结构与类,看看哪个最适合您。

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

为什么 C# 中结构体的推荐大小为 16 字节? 的相关文章

随机推荐

  • 将 git 存储库及其所有历史记录导入到现有 git 存储库中

    我有两个 git 存储库 我想将它们合并在一起而不丢失它们的提交历史记录 我试过这个 cd firstRepo git remote add other path to otherRepo git fetch other git check
  • 当我一步编译所有内容时,GCC 可以更好地优化事情吗?

    当我传递它时 gcc 会优化代码 O2标志 但我想知道如果我将所有源文件编译为目标文件 然后再链接它们 它实际上可以做到多好 这是一个例子 in a h int foo int n in foo cpp int foo int n retu
  • 角度 $routeParams 为空

    我有一个非常简单的 Angular 应用程序 我将其提炼为以下内容 var napp angular module Napp ngResource var CompanyCtrl function scope routeParams loc
  • 没有重载与此调用匹配。类型“字符串”不可分配给类型“信号”

    我正在使用打字稿构建微服务并处理信号 该代码直到几天前都运行良好 但最近它开始抛出错误 找不到解决该问题的方法 处理信号的代码 它只是文件的一部分 src main ts enum signals SIGHUP 1 SIGINT 2 SIG
  • 用于事件溯源的关系数据库架构

    我正在尝试将域事件存储在 postgres 数据库中 我对很多事情都不确定 而且我不想以后重新设计这个结构 所以我正在寻求有事件溯源经验的人的指导 我目前有下表 domain events version or event id integ
  • 在 Three.js 中生成带有折痕角度的平滑着色的顶点法线

    我在 Three js 中有几个对象JSON 模型格式 https github com mrdoob three js wiki JSON Model format 3 1 它指定顶点位置和面 有时是三角形 有时是四边形 有时具有材质索引
  • 使用不同的填充设置地图边界

    我想知道是否有任何方法可以为 Google 地图边界的设备的每个站点设置不同的填充 因为我有一个 mpview 女巫匹配整个活动 但我在屏幕底部 1 3 处有一个地图覆盖 线性布局内的一些文本 具有非半透明背景 现在我想通过使用地图边界来放
  • 选择器类型之间的 Func AutoMapper

    我有两种类型 Cat and Dog 我想使用Func
  • 使用 PHONEGAP 的 Android 应用程序教程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我尝试了这个论坛的几个问题 但无法获得 好的 教程 谁能给我一些有关 PhoneGap 入门的好教程的链接 我可以获取一些 android
  • Mac 验证错误:密码无效?尝试将 .pfx 转换为 .pem 时

    我已经安装了openssl在 Microsoft Windows 机器上 我试图进行此转换 From pfx To crt pem key 但我在尝试使用证书时不断收到此错误 Mac verify error invalid passwor
  • 如何简单地修改 appengine 项目中库文件夹中整个请求包的路径

    我已经使用 AppEngine 一段时间了 在使用外部库时总是遇到一些摩擦 我需要修改每个导入语句以反映该库不在项目的基本目录中的事实 例如 我的目录结构可能看起来像 安装了请求库 myapp app yaml myapp main py
  • Express/Passport 创建会话但不发送 cookie 到前端

    现在我正在运行一个 React 和 Node js 项目 客户端 反应应用程序 http 本地主机 3000 http localhost 3000 服务器端 Node js http localhost 5000 我目前正在尝试实现用户身
  • 移动浏览器上的客户端语音识别?

    我正在开发一个针对智能手机浏览器的项目 而且我似乎找不到任何方法来进行客户端语音识别 因为移动版本的 Chrome 甚至不支持他们自己的 Web 语音 API 有人知道如何在 Chrome 或 Firefox 等移动浏览器上进行语音识别吗
  • 使用 purrr 影响列表中每个数据帧的单列

    仍然习惯咕噜声 我有一个我认为的问题should很容易 但我不知道该怎么做 我想要做的就是将下面的日期时间转换为带有 as Date 的日期 它是一个数据框列表 一直在玩 但还没有找到有效的东西 任何帮助表示赞赏 df lt data fr
  • Bootstrap 5 alpha 2 卡组示例未像文档中那样显示

    我为卡片台插入了这个示例 并认为它会像文档中所示的那样显示 但事实并非如此 https stackpath bootstrapcdn com bootstrap 5 0 0 alpha2 css bootstrap min css 我正在使
  • 用于“未保存数据”保护的客户端/JS 框架?

    我们有一个典型的 Web 应用程序 它本质上是一个数据输入应用程序 有很多屏幕 其中一些屏幕具有一定程度的复杂性 我们需要提供标准功能 以确保如果用户在离开或关闭浏览器之前忘记单击 保存 按钮 他们会收到警告并可以取消 但仅当存在未保存或脏
  • 如何在javascript中模拟HTML5拖放事件?

    正如标题 我试图在 JavaScript 中模拟 HTML5 拖放事件 我研究了 jquery ui simulate 以及模拟功能here https stackoverflow com questions 6157929 how to
  • 如何为连接表创建 DAO?

    我目前正在学习使用Dao我的项目中的模式 我知道 一张表相当于一张Dao 我对吗 就像StudentDao SubjectDao Each Dao施行CRUD相关表中的操作 但我的问题是 我将如何创建一个DAO对于连接表 假设我有一个查询来
  • NSManagedObject 属性数组

    我想获得我的属性的数组NSManagedObject所以我可以使用 KVO 来导出它们 我可以手动创建一个数组 然后迭代它 但是 我想自动获取此列表 然后迭代 NSManagedObject 有一个与其关联的实体 使用NS实体描述 http
  • 为什么 C# 中结构体的推荐大小为 16 字节?

    我读了 Cwalina 书 有关 NET 应用程序开发和设计的建议 他说 一个设计良好的结构体的大小必须小于 16 个字节 出于性能目的 到底是为什么呢 而且 更重要的是 如果我运行 NET 3 5 很快将成为 NET 4 0 我可以拥有更