使用P/Invoke有什么缺点

HCL*_*HCL 4 .net c# pinvoke

我正在使用.net框架工作.在这个时候有一些情况,我使用P/Invoke做我无法用托管代码做的事情.

但是我从来不知道使用它的真正缺点究竟是什么.这也是我尽量不使用它的原因.

如果我谷歌,然后我找到关于它的各种帖子,一些绘制灾难性的图片,并建议永远不要使用它.使用一个或多个P/Invoke调用的应用程序的主要缺点和问题是什么?它们何时适用.(不是性能视角,更多的是"无法从网络共享中执行")?

Dar*_*rov 13

  1. 托管/非托管类型之间的编组会产生额外的开销
  2. 不适合中等信任
  3. 不太直观,可能导致细微的错误,如泄漏手柄,破坏内存,......
  4. 在查看导出的C函数时,可能需要一些时间才能正确执行
  5. 当问题迁移从86到64
  6. 当出现问题时,您不能简单地进入非托管代码来调试并理解为什么会出现异常.你甚至无法在Reflector中打开它:-)
  7. 限制跨平台互操作性(即:如果您依赖于仅限Windows的库,则无法在Linux下运行).

结论:仅在没有托管替代方案或性能关键应用程序中使用,其中仅存在非托管库以提供所需的速度.