马歇尔.ReadInt32等不同于不安全上下文和指针



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

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

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

使用Marshal的唯一"好处"是您不必显式地允许不安全代码。IIRC,您还需要FullTrust运行不安全代码,因此这可能是一个考虑因素。

我个人更喜欢使用Marshal,主要是因为我避免使用不安全的代码。至于哪个更快,我不确定,但我可以肯定的是,无论你怎么做,逐像素操作都可能很慢。更好的方法是将整个扫描线读入c#数组并处理它。

最新更新