2010-03-03 64 views
5

通过使用以下语法从C#应用程序调用用C++编写的.dll文件添加的典型开销多长时间?从C#调用非托管.dll的性能

[DllImport("abc.dll", EntryPoint = "xcFoo", CallingConvention = CallingConvention.Cdecl)] 
public extern static Result Foo(out IntPtr session, 
       [MarshalAs(UnmanagedType.FunctionPtr)]ObjectCallback callback, 
       UInt64 turnKey, 
       string serverAddress, 
       string userId, 
       string password); 

有没有更有效的方法来做到这一点?

回答

1

你说的是调用本地方法的开销吗?如果是这样,我不认为它是重要的,因为在.NET框架类库中有很多这样的调用。

现在,对于您的方案而言,开销是否显着只能通过执行性能测量来进行回答,并将其与期望值进行比较。

0

编组到本地方法将花费从NT堆的三个内存分配,这不是很糟糕。这是代表回来,变得忧心忡忡。

0

一个很好的方法来检查这样的事情是在一个破发点,你拨打电话扔了。不知道何时加载库,所以也许只能在第二次调用时检查断点(除非加载成本是您主要关心的问题)。然后打开visual studio中的反汇编窗口,看看你的dll函数被调用之前有多少行。