我希望使用P / Invoke来允许我的C#程序集与本机C库互操作;这需要是跨平台的(即Mono),因此不能使用混合模式组件。我想知道使用不安全的P / invoke调用以及处理不安全方法中指针的所有转换是否有任何性能优势,而不是进行典型的“安全”P / Invoke调用。提前谢谢!
澄清: 我不打算使用托管C ++包装器,如here所述。我只想知道:
之间是否存在性能差异 extern static void native_call_here(IntPtr parameter1, String parameter2)
和
extern static void native_call_here(int* parameter1, char* parameter2)
答案 0 :(得分:4)
在某些时候会有Marshaling。在前一种情况下,只要您进行PInvoke方法调用就会发生Marshaling。在后一种情况下,由于您使用不安全的代码进行调用,因此您可以控制Marshaling何时/如何发生。如果您在不安全的代码中使用非托管内存进行多项操作,这可能会带来好处,但如果它只是传递数据,那么您所做的一切都会转移到编组发生的位置。如果有的话,我希望PInvoke在这种情况下会更快,但是,如果它重要的话,一如既往地描述它。