Marshal.ReadInt32等与不安全的上下文和指针有什么不同?

Ans*_*iņš 6 .net c# unmanaged

特别是:元帅更安全吗?指针更快吗?

int pixel = Marshal.ReadInt32(bitmapData.Scan0, x * 4 + y * bitmapData.Stride);
int pixel = ((int*)bitmapData.Scan0)[x + y * bitmapData.Stride / 4];
Run Code Online (Sandbox Code Playgroud)

lep*_*pie 1

没有区别。如果您查看代码,Marshal.ReadInt32您会发现它使用指针来执行相同的操作。

唯一的“好处”Marshal是您不必明确允许不安全的代码。IIRC,您还需要 FullTrust 才能运行不安全的代码,因此这可能是一个考虑因素。