gpt4 book ai didi

c# - 为什么 Span 扩展方法未使用 'in' 参数修饰符实现?

转载 作者:行者123 更新时间:2023-12-05 01:41:24 24 4
gpt4 key购买 nike

随着 C#7.2 的发布,出现了 in parameter modifier Span<T> struct .跨度现在已经充斥着 .NET Core 周围的 API。还发布了一个 .NET Standard API ( System.Memory ),可以使用 Span<T> , ReadOnlySpan<T>

System.Memory 的一部分API 是这些切片类型的扩展方法,as seen here .

问题是,为什么不使用 in 实现这些扩展方法?跨度的参数修饰符?自 Span<T>ReadOnlySpan<T>ref readonly struct类型,这些方法似乎会导致运行时创建传递给这些方法的跨度的防御性副本。据我所知,此副本相对便宜,但似乎可以看到很小的性能提升。

这些扩展方法的一些 .NET Core 实现是 located here .

为了澄清,我期待这样的方法签名:

public static int IndexOf<T>(this in System.Span<T> span, T value) where T : System.IEquatable<T>
public static System.ReadOnlySpan<char> Trim(this in System.ReadOnlySpan<char> span)
public static bool IsWhiteSpace(this in System.ReadOnlySpan<char> span)

最佳答案

因为 in既有优点也有缺点;大多数优点都与结构复制性能有关,并避免不必要的大型结构复制(特别强调“大”),但是 Span<T> 不是一个大结构,在我见过的几乎所有测试中,都使用 inSpan<T>要么降低性能,要么(不太常见)对性能没有影响 - 所以即使在最好的情况下(它不会降低性能),也没有确实有理由添加它。

关于c# - 为什么 Span<T> 扩展方法未使用 'in' 参数修饰符实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54465523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com