C# 在实例字段中存储对结构的只读引用
使用C#7.2,您可以通过参数中的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标记为只
传递结构,该参数基本上是一个只读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。