安全与不安全的代码

Lum*_*mpy 9 c# unsafe

今天阅读这个关于安全和不安全代码的问题我然后在MSDN中阅读它,但我仍然不理解它.你为什么要在C#中使用指针?这纯粹是为了速度吗?

Kei*_*ler 23

使用不安全代码有三个原因:

  • API(如John所述)
  • 获取数据的实际内存地址(例如,访问内存映射硬件)
  • 访问和修改数据的最有效方式(时间要求严格的性能要求)

  • 对于使用.net的时间关键型应用程序,无论如何都不聪明.GC是非确定性的,可以随时启动.这基本上搞砸了你时间关键的应用程序.其他点我同意顺便说一下! (6认同)
  • 我听说使用不安全C#的另一个原因是确保在确定的时间点从内存中删除安全敏感信息,如密码或私有加密密钥.否则,密码可能会在内存中挂起,直到其他人想要写入相同的位置. (2认同)

Joh*_*lén 5

有时您需要指针将C#连接到底层操作系统或其他本机代码.你强烈反对这样做,因为它"不安全"(natch).

在一些非常罕见的情况下,您的性​​能受CPU限制,您需要极小的额外性能.我的建议是在汇编程序或C/C++的单独模块中编写这些CPU-intessive部分,导出API,并让您的.NET代码调用该API.一个可能的额外好处是,您可以将特定于平台的代码放在非托管模块中,并使.NET平台不可知.

  • 即使使用不安全的C#,您仍然在托管环境中工作.JIT可以针对正确的CPU,并在适当的时候执行其他优化(如内联方法).如果您不需要使用其他语言的额外功能,并且您已经使用C#编写,并且您希望进行指针操作以提高性能,那么我认为"不安全"的C#是正确的方法. (3认同)