写点什么

解决 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:122365
用户头像

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

关注

评论

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

TikTok直播限流是否与网络线路有关?

Ogcloud

海外直播专线 Tik Tok直播 tiktok直播 tiktok直播专线 tiktok直播网络

数字货币支付系统开发搭建:构建未来的区块链支付生态

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

说出与 IoTDB 的故事:温暖有你,祝福有礼!

Apache IoTDB

揭秘如何用Monaco Editor打造功能强大的日志查看器

袋鼠云数栈

奋进2025 | 用友BIP乘风破浪,大有可为!

用友BIP

用友 企业数字化 用友YonBIP 企业数智化 用友BIP

自主可控,体验跃升丨恒拓高科亮相“HDD·广东鸿蒙生态伙伴论坛”

BeeWorks

AI+Data:AI时代的企业数据治理

合合技术团队

数据治理 数字化 #人工智能 #大数据

OpenNJet v3.2.0正式发布

通明湖

非凸科技再次斩获多项行业殊荣,感谢认可

非凸科技

a16z:小模型 + 边缘 AI 将定义 2025;音效模型 TangoFlux:3 秒钟生成 30 秒音频丨RTE 开发者日报

RTE开发者社区

2000道面试必问的Java面试八股文及答案整理(2025版)

Summer

Java 程序员 面试 大厂 八股文

大佬带你一周刷完Java面试八股文,比刷视频效果好多了

Summer

Java 程序员 面试 架构师 大厂

一颗光谱芯片的AI辉光

脑极体

AI

cn域名注册怎么注册,注册cn域名需要哪些条件和流程?

防火墙后吃泡面

40% 降本:多点 DMALL x StarRocks 的湖仓升级实战

StarRocks

集成服务

flfljh

2024年加密市场的突破与展望:以太坊与Solana的崛起

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

用友BIP联合华为完成鲲鹏原生开发技术认证,加速信创发展!

用友BIP

华为 用友 华为鲲鹏 企业数智化 用友BIP

【连载 09】atomic包原子类

FunTester

吕军教授实录2:重症数据挖掘研究思路分享

ModelWhale

人工智能 大数据 医工融合

亚马逊运营广告秘籍:探究高效营销之道

科普小能手

数据挖掘 数据分析 跨境电商 API 接口 亚马逊运营

做TikTok直播可以选择哪些网络方案?

Ogcloud

海外直播专线 tiktok直播专线 tiktok直播网络 tiktok直播加速 tiktok直播网络方案

JVM实战—如何分析jstat统计来定位GC

不在线第一只蜗牛

JVM

日志聚类算法 Drain 的实践与改良

观测云

日志 聚类算法

直播预告丨社区年度交流会& 《RTE 和 AI 融合生态洞察报告 2024》发布

RTE开发者社区

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