Is it possible to avoid overhead of property-method call in this case (somehow forcing compiler inline?):
struct CStruct
{
public int field;
}
unsafe sealed class WrapperForCStruct(CStruct* pointer)
{
public CStruct* ptr = pointer;
public int Field => ptr->field;
}
Accessing obj.Field has overhead comparing to accessing obj.ptr->field:
unsafe
{
var cstruct = new CStruct();
var obj = new WrapperForCStruct(&cstruct);
var x = obj.Field;
var y = obj.ptr->field;
}
Disassembly
var x = obj.Field;
00007FFDB5C43E96 mov rcx,qword ptr [rbp-10h]
00007FFDB5C43E9A cmp dword ptr [rcx],ecx
00007FFDB5C43E9C call qword ptr [CLRStub[MethodDescPrestub]@00007FFDB5E4D5F0 (07FFDB5E4D5F0h)]
00007FFDB5C43EA2 mov dword ptr [rbp-14h],eax
00007FFDB5C43EA5 nop
var y = obj.ptr->field;
00007FFDB4223E97 mov rcx,qword ptr [rbp-10h]
00007FFDB4223E9B mov rcx,qword ptr [rcx+8]
00007FFDB4223E9F cmp byte ptr [rcx],cl