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

发布于 2024-11-03 01:09:10 字数 563 浏览 2 评论 0原文

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

澄清: 我不打算使用托管 C++ 包装器,如 此处< 所讨论的那样< /a>.我只是想知道:

extern static void native_call_here(IntPtrparameter1, Stringparameter2)

extern static void native_call_here(int*parameter1, char*parameter2) 之间是否存在性能差异>

I'm looking to use P/Invoke to allow my C# assembly to interop with a native C library; this needs to be cross-platform (i.e. Mono), so a mixed-mode assembly cannot be used. I'm wondering if there is any performance advantage to using unsafe P/invoke calls, and handling all the conversions to pointers in an unsafe method, versus making the typical "safe" P/Invoke call. Thanks in advance!

CLARIFICATION:
I am not looking to use a managed C++ wrapper, as is discussed here. I just want to know if there are performance differences between:

extern static void native_call_here(IntPtr parameter1, String parameter2)

and

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

懒的傷心 2024-11-10 01:09:10

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

There is going to be Marshaling at some point. In the former case, the Marshaling occurs as soon as you make the PInvoke method call. In the latter case, since you're calling from unsafe code, you have control over when/how the Marshaling occurs. This could offer a benefit if you're doing multiple operations with unmanaged memory in your unsafe code, but if it's just passing the data through, all you've done is shifted where the Marshaling occurs. If anything, I would expect the PInvoke to be faster in this case, but, as always, profile it if it matters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文