Некоторые измерения производительности
Преимущества в производительности не так велики, как вы думаете.
Я провел некоторые измерения производительности нормального доступа к управляемым массивам в сравнении с небезопасными указателями в C #.
Результаты сборки, выполненной вне Visual Studio 2010, .NET 4, с использованием
Любой процессор | Выпуск основан на следующей спецификации ПК: ПК на базе x64, 1 четырехъядерный процессор. Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~ 2833 МГц .
Linear array access
00:00:07.1053664 for Normal
00:00:07.1197401 for Unsafe *(p + i)
Linear array access - with pointer increment
00:00:07.1174493 for Normal
00:00:10.0015947 for Unsafe (*p++)
Random array access
00:00:42.5559436 for Normal
00:00:40.5632554 for Unsafe
Random array access using Parallel.For(), with 4 processors
00:00:10.6896303 for Normal
00:00:10.1858376 for Unsafe
Обратите внимание, что небезопасная *(p++)
идиома на самом деле работает медленнее. Полагаю, это сломало оптимизацию компилятора, которая сочетала переменную цикла и (сгенерированный компилятором) доступ к указателю в безопасной версии.
Исходный код доступен на github .