写点什么

解决 C# 7.2 中的结构体性能问题

  • 2018-08-03
  • 本文字数:653 字

    阅读完需:约 2 分钟

在某些使用了 readonly 关键字的情况下,C#编译器会创建出结构体的防御副本。虽然这个问题已经众所周知并被记录下来了,但仍然值得重新审视,因为它与C# 7.2 的几个特性有关。in 和ref readonly 关键字的使用让这个问题出现得更频繁,而readonly 结构体提供了一种解决方法。

C#中的结构体通常用于提升性能,减少用于分配和销毁内存的开销。然而,潜在的陷阱限制了它们的使用。C# 7.2 增加了一个改进的 readonly 结构体来解决这个问题。

在如下几种情况下,C#编译器将为结构体创建副本:

  • 结构体不是只读的。

  • 机构提变量使用了 readonly 修饰符。

  • 调用方法(包括属性)。

复制代码
public struct SomeStruct
{
private int _x;
 
public int X { get { return _x; } }
}
 
private readonly SomeStruct s = new SomeStruct(42);
 
s.X; // 编译器创建了一个防御副本。

当 x 是 in 参数、ref readonly 局部变量或通过 readonly reference 返回值的方法调用的结果时,适用相同的规则。

复制代码
public void BadFunction(in SomeStruct s)
{
s.X; // 编译器创建了一个防御副本。
}

C# 7.2 增加了声明 readonly 结构体的可能性,并提供了避免创建防御副本的解决方案。声明为 readonly 的结构体不能具有属性设置器,并且不能对结构体成员赋值。

我们可以通过静态分析来检测防御性副本问题。 ErrorProne.NET 的灵感来自于 ErrorProne,一个 Java 静态分析工具。移植到.NET 的版本由一组 Roslyn 分析器组成,侧重于准确性和性能。其中有一部分分析器适用于结构体,以Nuget 包的方式供下载使用。

查看英文原文 Performance of Structs in C# 7.2

2018-08-03 09:121890
用户头像

发布了 731 篇内容, 共 457.5 次阅读, 收获喜欢 2003 次。

关注

评论

发布
暂无评论
发现更多内容

阿里通义降价,百度文心免费,一图对比谁是最具性价比大模型?

可信AI进展

人工智能 大模型

AI日报|微软推出Copilot+PC,通义主模型大幅降价,文心两大模型全面免费...

可信AI进展

人工智能

用户故事一定要有 “So that...” 吗?

敏捷开发

项目管理 产品经理 敏捷开发 需求分析 用户故事

过年解压大法:从发疯到发财

最新动态

如何提升软件开发从业者在行业中竞争力?

小魏写代码

【论文解读】大模型与游戏-综述和路线图

合合技术团队

游戏 LLM

反射API与AOP:实现零配置的服务治理

技术冰糖葫芦

API boy API 文档 API】 API 性能测试

鸿蒙4.2和4.0有什么区别?升级后有哪些亮点

FN0

HarmonyOS 鸿蒙系统

【FAQ】HarmonyOS SDK 闭源开放能力 —IAP Kit(2)

HarmonyOS SDK

HarmonyOS

提升IT运维效率:TASKCTL 任务自动化编排工具

敏捷调度TASKCTL

批量任务 TASKCTL 批量异步任务工具 IT自动化运维

比较与对比:WMS与TMS在供应链管理中的角色和功能

天津汇柏科技有限公司

仓库管理系统

iZotope RX 10 for Mac 专业音频修复 兼容M芯片

Rose

CentOS7.9安装mysql-8.0.36踩坑小记

Simon

MySQL MySQL 运维 MySQL 8.0

深度解析:接口测试用例设计的关键步骤与技巧

测试人

软件测试 接口测试

OpenAI新模型GPT-4o“炸裂登场” 响应速度堪比真人 关键还免费!

蓉蓉

ChatGPT gpt4o

三维数字雕刻ZBrush 2021 mac版下载 含ZBrush 2021破解补丁

Rose

【堡垒机小知识】堡垒机资产监控能监控哪些东西呢?

行云管家

网络安全 堡垒机 主机监控

接口测试用例设计的关键步骤与技巧

测吧(北京)科技有限公司

测试

零代码零硬件玩转华为云IoT,基于设备联动实时监控设备

华为云开发者联盟

华为云 iotda 华为云IoT 华为云开发者联盟 企业号2024年5月PK榜

接口测试用例设计的关键步骤与技巧解析

霍格沃兹测试开发学社

【堡垒机小知识】堡垒机和接口机的重要区别分析

行云管家

堡垒机 IT运维 接口机

Web 组态软件 TopStack 快速上手

图扑物联

工业物联网 组态软件 web组态 web组态编辑器

解决C# 7.2中的结构体性能问题_.NET_Pierre-Luc Maheu_InfoQ精选文章