值
规则 ID
CA1844
类别
“性能”
修复是中断修复还是非中断修复
非中断
原因
派生自 Stream 的类型会重写 ReadAsync(Byte[], Int32, Int32, CancellationToken),但不会重写 ReadAsync(Memory<Byte>, CancellationToken)。 或,派生自 Stream 的类型会重写 WriteAsync(Byte[], Int32, Int32, CancellationToken),但不会重写 WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)。
规则说明
添加了基于内存的 ReadAsync 和 WriteAsync 方法来提高性能,这些方法的实现方式有多种:
它们分别返回 ValueTask 和 ValueTask<int>,而不是 Task 和 Task<int>。
它们允许传入任意类型的缓冲区,而无需对数组执行额外的复制。
为了实现这些性能优势,派生自 Stream 的类型必须提供自己的基于内存的实现。 否则,将强制默认实现将内存复制到数组中,以便调用基于数组的实现,从而降低性能。 当调用方传入不受数组支持的 Memory<T> 或 ReadOnlyMemory<T> 实例时,性能会受到影响。
如何解决冲突
修复冲突的最简单方法是将基于数组的实现重写为基于内存的实现,然后根据基于内存的方法实现基于数组的方法。
何时禁止显示警告
如果以下任一情况适用,则禁止显示此规则的警告是安全的:
不需要考虑性能损失的问题。
如你所知,你的 Stream 子类将始终仅使用基于数组的方法。
你的 Stream 子类具有不支持基于内存的缓冲区的依赖项。
另请参阅
性能规则
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有