前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CA1844:对“流”进行子分类时,提供异步方法的基于内存的重写

CA1844:对“流”进行子分类时,提供异步方法的基于内存的重写

作者头像
呆呆
发布2022-02-26 08:37:37
4950
发布2022-02-26 08:37:37
举报
文章被收录于专栏:centosDaicentosDai

规则 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档