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

时间:2011-07-27 11:50:08

标签: c# .net unmanaged

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

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

2 个答案:

答案 0 :(得分:1)

没有区别。如果你看一下Marshal.ReadInt32中的代码,你会看到它使用指针来执行相同的操作。

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

答案 1 :(得分:0)

我个人更喜欢使用Marshal,因为我避免使用不安全的代码。至于哪个更快,我不确定,但我确信逐像素操作可能会慢,但你这样做。更好的方法是将整个扫描线读入C#数组并进行处理。