Чем Marshal.ReadInt32 и т. Д. Отличается от небезопасного контекста и указателей? - PullRequest
6 голосов
/ 27 июля 2011

В частности: маршал безопаснее? Указатели быстрее?

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

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Разницы нет.Если вы посмотрите на код из Marshal.ReadInt32, то увидите, что для выполнения того же действия используются указатели.

Единственное «преимущество» с Marshal состоит в том, что вам не нужно явно разрешать небезопасный код.IIRC, вам также требуется FullTrust для запуска небезопасного кода, так что это может быть вопросом.

0 голосов
/ 27 июля 2011

Лично я предпочитаю использовать Marshal в основном потому, что я избегаю небезопасного кода. Что касается того, что быстрее, я не уверен, но я уверен, что работа пиксель за пикселем может быть медленной, как бы вы это ни делали. Гораздо лучше прочитать всю строку развертки в массиве C # и поработать над этим.

...