C# 何时将in关键字与ReadOnlyMemory或ReadOnlySpan一起使用?

C# 何时将in关键字与ReadOnlyMemory或ReadOnlySpan一起使用?,c#,c#-7.3,C#,C# 7.3,我想知道in关键字和readonlysmory和ReadOnlySpan的用法是什么 void方法(只读内存) { //修改内存的代码不会反映在此范围之外。 内存=内存片(3); } void方法(内存中) { //同上 内存片(3); } void方法(在只读内存中) { //这里有什么性能提升吗? } 基本上,在或只读(Span/内存)中使用)与const typename&(C++)不同?比赛你的马,让我们知道第二个甚至不会编译,是吗?哦,你对第二个是正确的。所有方法都会编译。第二个和第

我想知道
in
关键字和
readonlysmory
ReadOnlySpan
的用法是什么

void方法(只读内存)
{
//修改内存的代码不会反映在此范围之外。
内存=内存片(3);
}
void方法(内存中)
{
//同上
内存片(3);
}
void方法(在只读内存中)
{
//这里有什么性能提升吗?
}

基本上,在或只读(
Span
/
内存
)中使用
)与
const typename&
(C++)不同?

比赛你的马,让我们知道第二个甚至不会编译,是吗?哦,你对第二个是正确的。所有方法都会编译。第二个和第三个虽然由分析器标记,因为它们将导致结构的防御副本。这是一个微观优化,结构通过引用传递,但它不努力将(可能更改的)值复制回调用方。不进行复制是一件很简单的事情,但是您确实需要找出它是否真的比按值传递快,这是小型结构的正常方式。结构的大小以及在方法体中处理结构成员的频率很重要。它只有两名成员,因此不太可能从中获得里程数。您可以通过无意中强制抖动优化器做出更好的选择来获得意外的加速。
void Method(ReadOnlyMemory<int> memory)
{
    // Code that modifies memory wont reflect out of this scope.
    memory = memory.Slice(3);
}

void Method(in Memory<int> memory)
{
    // same thing as the above
   memory.Slice(3);
}

void Method(in ReadOnlyMemory<int> memory)
{
    // is there any performance gain here or something?
}