50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

HarmonyOS NEXT 中级开发笔记:ArkUI实现球场预订组件开发

chengxujianke

提升效率,从一个时间戳转换工具开始,CodeBuddy Craft 实战分享

不惑

CodeBuddy首席试玩官

HarmonyOS NEXT 中级开发笔记:电器管家应用ArkTS实践

chengxujianke

HarmonyOS NEXT 中级开发笔记:基于ArkUI的健身体操应用界面实践

chengxujianke

HarmonyOS NEXT 中级开发笔记:ArkUI实现主题铃声应用

chengxujianke

HarmonyOS NEXT 中级开发笔记:马拉松赛事App的ArkUI实践

chengxujianke

WebGL技术在行业中的应用

北京木奇移动技术有限公司

软件外包公司 webgl开发 webgl技术

从清华实验室到京东零售技术:一位算法工程师的风控实战录

京东零售技术

HarmonyOS NEXT 中级开发笔记:ArkUI实现外卖快递应用界面

chengxujianke

HarmonyOS NEXT 中级开发笔记:ArkUI实现出差日程应用的界面优化

chengxujianke

HarmonyOS NEXT 中级开发笔记:ArkUI实现智能家电控制界面

chengxujianke

HarmonyOS运动开发:户外运动中计算卡路里

王二蛋和他的张大花

鸿蒙 os

容器技术驱动云原生与小程序生态融合:应用开发新范式

xuyinyin

HarmonyOS NEXT 中级开发笔记:基于ArkUI的燃脂运动应用实践

chengxujianke

HarmonyOS NEXT 中级开发笔记:用ArkUI打造艺术展览类应用的实践

chengxujianke

HarmonyOS NEXT 中级开发笔记:电台应用ArkUI实践记录

chengxujianke

AI只不过是"普通"技术 [翻译&阅读笔记]

技艺的尾巴

HarmonyOS NEXT 中级开发笔记:基于ArkUI的休闲棋盘游戏实现

chengxujianke

HarmonyOS NEXT 中级开发笔记:ArkUI实现动态主题切换的艺术设计实践

chengxujianke

HarmonyOS NEXT 中级开发笔记:AI问答应用中的ArkUI实践

chengxujianke

HarmonyOS NEXT 中级开发笔记:ArkUI尺寸测量实践

chengxujianke

HarmonyOS NEXT 中级开发笔记:音乐播放器ArkUI实践

chengxujianke

如何设计一个高性能可扩展的自旋锁

程序员老王

HarmonyOS NEXT 中级开发笔记:ArkUI实现棋类游戏界面交互

chengxujianke

HarmonyOS NEXT 中级开发笔记:ArkUI 实现新闻播报应用开发实践

chengxujianke

HarmonyOS NEXT 中级开发笔记:天气预报应用中的ArkUI实践

chengxujianke

【HarmonyOS 5】鸿蒙mPaaS详解

GeorgeGcs

鸿蒙 HarmonyOS mPaaS

AI辅助写作 从提笔难到高效创作的智能升级

郑州埃文科技

安全产品//等保一体机

黑龙江陆陆信息测评部

HarmonyOS NEXT 中级开发笔记:ArkUI实现动态壁纸主题工具

chengxujianke

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