是否应尽可能通过引用返回?C# 7 ref返回的性能考量
什么时候该用C# 7的引用返回(return ref)?
嘿,这个问题戳中了引用返回的核心痛点——它可不是随便用都能提升性能的,得看返回对象的内存大小和引用本身的开销对比来决定!
先给大家理清楚基础逻辑:
- C# 7引入的
return ref语法,允许我们返回变量的引用而非值的副本。 - 引用本身的内存占用是固定的:32位系统占4字节(32位),64位系统占8字节(64位)。
那什么时候用才划算?拿两个典型场景对比就懂了:
大结构体场景:比如128位的Coord结构体
假设我们定义这样一个结构体:struct Coord { public long X; public long Y; }这个结构体总占用16字节(128位),远大于引用的4/8字节开销。这时候用
return ref返回它的引用,后续通过引用传递或操作,就能完全避免每次返回都复制16字节数据的开销,性能提升非常直观。小数据类型场景:比如8位的byte
如果我们尝试返回ref byte,那引用本身的4/8字节开销,反而比直接复制1个字节的成本高得多——这时候用引用返回完全是画蛇添足,甚至会拖慢性能。
核心判断标准
简单总结:当返回对象的内存大小大于引用本身的开销(32位系统>4字节,64位系统>8字节)时,引用返回才有性能收益;反之,直接返回值反而更高效。另外还要兼顾代码可读性——如果性能收益微乎其微,没必要为这点优化牺牲代码的直观性。
内容的提问来源于stack exchange,提问作者AustinWBryan
相关产品推荐
相关产品推荐

