【发布时间】:2015-07-30 02:57:03
【问题描述】:
我正在从 C# 调用两个 C++ 函数。在大约 100 万次调用的迭代中这样做时,我看到了大约 30% 的开销。
C++ 函数:
EXTERN_C void STDAPICALLTYPE FunctionA(UINT_PTR mathId)
{
...
...
}
在我的 C# 程序集 dll 中:
[DllImport("CPlusPlus.dll")]
public static extern void FunctionA([In] IntPtr mathID);
从如下函数调用:
public static void HelpingFunction([In]UInt64 mathID)
{
FunctionA((IntPtr)mathID);
}
当“HelpingFunction”被调用超过一百万次时,这种实现方式会产生更多开销。
有人可以给我其他想法以减少开销吗?从 C# 程序集中调用 C++ 函数的其他方法是什么?
【问题讨论】:
-
很难知道如何改进这一点,因为我们看不到
FunctionA的内部。 -
您也可以考虑在循环周围编写一个 CLI 包装器,这样您的开销就会从“数百万”次调用减少到只有几个。
标签: c# c++ pinvoke marshalling