2010-03-03 79 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函數被調用之前有多少行。