我知道不安全的代码更适合访问 Windows API 之类的东西并进行不安全的类型转换,而不是编写性能更高的代码,但我想问您是否注意到使用它在实际应用程序中带来了任何显着的性能改进与安全的 C# 代码相比。
一些性能测量
性能优势并不像您想象的那么大。
我对 C# 中的正常托管数组访问与不安全指针进行了一些性能测量。
在 Visual Studio 2010、.NET 4 之外使用构建运行的结果
任何CPU |根据以下 PC 规格发布版本:基于 x64 的 PC,1 个四核处理器。 Intel64 家族 6 型号 23 步进 10 正版英特尔 ~2833 Mhz.
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++)
idiom实际上跑得更慢。我猜这破坏了编译器优化,该优化将循环变量和(编译器生成的)指针访问结合在安全版本中。
源代码可在github https://github.com/thomasbratt/PointerPerformanceTest.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)