C# 在实例字段中存储对结构的只读引用

C# 在实例字段中存储对结构的只读引用,c#,memory-management,reference,C#,Memory Management,Reference,使用C#7.2,您可以通过参数中的传递结构,该参数基本上是一个只读ref class Model { private readonly TStruct _s; Model(in TStruct s) { _s = s; } } 在上面的代码中,TStruct是一个struct,我是将引用分配给\u s还是复制整个结构?我想要的是避免不必要的内存复制。因为我只需要从s读取数据,所以我认为readonly ref就可以了。不幸的是,我不能将\u s标记为只

使用C#7.2,您可以通过参数中的
传递结构,该参数基本上是一个
只读ref

class Model {
    private readonly TStruct _s;

    Model(in TStruct s) {
        _s = s;
    }
}
在上面的代码中,
TStruct
是一个
struct
,我是将引用分配给
\u s
还是复制整个结构?
我想要的是避免不必要的内存复制。因为我只需要从
s
读取数据,所以我认为
readonly ref
就可以了。不幸的是,我不能将
\u s
标记为
只读ref

class Model {
    private readonly TStruct _s;

    Model(in TStruct s) {
        _s = s;
    }
}
使用C#7.2,您可以通过in参数传递结构,该参数基本上是只读引用

是的,这是明确的

在上面的代码中,TStruct是一个结构,我是将引用分配给_还是 复制整个结构

在指定整个结构时复制它。您可能会避免调用构造函数的多个副本(实现细节),因为只传入一个指针,但这可能会被JIT优化掉

在上面的代码中,TStruct是一个结构,我是将引用分配给_s还是do 我复制整个结构


然后不要使用结构。通常,指针只能与函数调用或临时变量一起使用-\u s不是这些。它们的存在是为了避免在操作过程中复制结构,而不是改变存储模型。

我想进一步说的是,
正是被请求的东西-一个通常被引用而不被复制的数据存储。从给出的小信息中不能说,也没有被请求。有很多迹象表明这一点,但这很可能是一个格式不正确/极简的问题。在我的特定场景中,我将封送的二进制数据读取到结构中,并希望以最小的性能占用使用它。看起来我必须在读取后立即从结构数据构造一个类。这取决于-如果数据存活时间更长,是的。这完全取决于API。