今天阅读this question有关安全和不安全的代码,然后我在MSDN中阅读了该代码,但我仍然不理解。你为什么要在C#中使用指针?这纯粹是为了速度吗?
答案 0 :(得分:23)
使用不安全代码有三个原因:
答案 1 :(得分:5)
有时您需要指针将C#连接到底层操作系统或其他本机代码。你强烈反对这样做,因为它“不安全”(自然)。
在一些非常罕见的场合,你的性能受CPU限制,你需要那么微小的额外性能。我的建议是在汇编程序或C / C ++的单独模块中编写这些CPU-intessive部分,导出API,并让您的.NET代码调用该API。一个可能的额外好处是,您可以将特定于平台的代码放在非托管模块中,并使.NET平台不可知。
答案 2 :(得分:4)
我倾向于避免它,但有时候它会非常有用:
例如,最后,我维护了一些序列化代码。将float
写入流而不必使用BitConverter.GetBytes
(每次创建一个数组)是痛苦的 - 但我可以作弊:
float f = ...;
int i = *(int*)&f;
现在我可以使用shift(>>
)等来编写i
比写f
更容易(如果调用BitConverter.GetBytes
,则字节将相同我现在通过我选择使用shift来控制字节序。)
答案 3 :(得分:0)
至少有一个托管的.Net API经常使用指针不可避免。请参阅SecureString和Marshal.SecureStringToGlobalAllocUnicode。
获取SecureString
的纯文本值的方法是使用Marshal
方法之一将其复制到非托管内存。