使用不安全的P/Invoke调用是否比使用正常的P/Invoke调用有性能优势?

本文关键字:Invoke 调用 性能 是否 不安全 | 更新日期: 2023-09-27 17:52:46

我希望使用p/Invoke来允许我的c#程序集与本地C库互操作;这需要是跨平台的(即Mono),因此不能使用混合模式程序集。我想知道使用不安全的P/invoke调用,并在不安全的方法中处理到指针的所有转换,与进行典型的"安全"P/invoke调用相比,是否有任何性能优势。提前感谢!

澄清:我不打算使用托管的c++包装器,就像这里讨论的那样。我只是想知道是否有性能差异:

extern static void native_call_here(IntPtr parameter1, String parameter2)

extern static void native_call_here(int* parameter1, char* parameter2)

使用不安全的P/Invoke调用是否比使用正常的P/Invoke调用有性能优势?

在某些时候会有封送处理。在前一种情况下,封送处理在您调用PInvoke方法时立即发生。在后一种情况下,由于您是从不安全代码中调用的,因此您可以控制封送处理何时/如何发生。如果您在不安全的代码中使用非托管内存执行多个操作,这可能会带来好处,但如果只是传递数据,那么您所做的一切都将转移到发生封送处理的地方。如果有的话,我希望PInvoke在这种情况下更快,但是,像往常一样,如果它重要,请对其进行配置。