- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否有人对在托管 .Net 代码的 Win32 方法上使用 DLLImport/PInvoke 的负面影响有一个不错的解释或概述?
我计划使用各种 Win32 方法,并希望更好地了解这样做的负面影响。
谢谢
布莱恩。
最佳答案
根据MSDN - Calling Native Functions from Managed Code
PInvoke has an overhead of between 10 and 30 x86 instructions per call. In addition to this fixed cost, marshaling creates additional overhead. There is no marshaling cost between blittable types that have the same representation in managed and unmanaged code. For example, there is no cost to translate between int and Int32.
根据我的经验,P/调用 native 函数时肯定会产生开销,但通常不值得担心性能损失。编码成本是需要记住的事情。如果您传递大型结构、字符串等,那么性能成本将很快显现出来。
对于非常频繁调用的 P/Invoke 函数,您可能需要考虑将 [SuppressUnmanagedCodeSecurity]
添加到您的 P/Invoke 函数定义中(请参阅 MSDN - SuppressUnmanagedCodeSecurityAttribute )。这会阻止运行时执行堆栈遍历,以确保调用者具有 UnmanagedCode 权限。当然,在添加此属性之前,请确保您了解安全后果。
关于.net - 在 Win32/COM 方法上调用 PInvoke 时,通常是否会对性能造成明显影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5592572/
我是一个使用 Python 和 PyGTK 的 Linux 软件项目的开发人员。我们正在编写的程序依赖于许多第三方包,这些包可通过所有 mayor 发行版存储库获得。其中之一是 python 绑定(b
我是一名优秀的程序员,十分优秀!