True Unsafe Code Performance

前端 未结 7 608

I understand unsafe code is more appropriate to access things like the Windows API and do unsafe type castings than to write more performant code, but I would like to ask yo

7条回答
  •  鱼传尺愫
    2020-11-30 11:42

    Some Performance Measurements

    The performance benefits are not as great as you might think.

    I did some performance measurements of normal managed array access versus unsafe pointers in C#.


    Results from a build run outside of Visual Studio 2010, .NET 4, using an Any CPU | Release build on the following PC specification: x64-based PC, 1 quad-core processor. Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~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
    

    Note that the unsafe *(p++) idiom actually ran slower. My guess this broke a compiler optimization that was combining the loop variable and the (compiler generated) pointer access in the safe version.

    Source code available on github.

提交回复
热议问题