调用c+的开销+/来自c#的cx函数有时会急剧增加

调用c+的开销+/来自c#的cx函数有时会急剧增加,c#,interop,c++-cx,overhead,C#,Interop,C++ Cx,Overhead,我注意到我的应用程序中存在wird行为,我不明白为什么会发生这种情况 我有一个我经常调用的C方法(我们称之为methodC)。在这个方法的主体中,只有一条指令是对c++/cx方法的调用(我们称之为methodCx) methodCx的平均执行时间小于1ms。 方法C的平均执行时间为3ms 这意味着从C#调用methodCx的平均开销约为3ms 有时,当我的应用程序的负载很高时(由于在其他线程上进行的计算),这个开销甚至可以跳到80ms。我不明白为什么会这样。我知道,由于负载的原因,代码执行可能会

我注意到我的应用程序中存在wird行为,我不明白为什么会发生这种情况

我有一个我经常调用的C方法(我们称之为methodC)。在这个方法的主体中,只有一条指令是对c++/cx方法的调用(我们称之为methodCx)

methodCx的平均执行时间小于1ms。 方法C的平均执行时间为3ms

这意味着从C#调用methodCx的平均开销约为3ms

有时,当我的应用程序的负载很高时(由于在其他线程上进行的计算),这个开销甚至可以跳到80ms。我不明白为什么会这样。我知道,由于负载的原因,代码执行可能会减慢,但似乎只有从c#调用cx方法的速度增长得如此缓慢。非c#->cx调用似乎没有受到影响(至少没有那么单调)。有人能解释一下这种行为吗。至少可以给我们一个线索去哪里寻找罪犯

提前谢谢

编辑1 methodCx将3个单独的浮点数作为参数。它返回Cx对象

编辑2
我在C#中使用秒表计时,在C++/cx中使用性能计数器计时。结果是一样的。methodCx的执行时间只有几百微秒,而methodC的执行时间在其他线程的高负载期间甚至可以达到100毫秒。

您是如何计时的?我猜由于某种原因(取决于您传递的参数类型,它可能需要执行一些内存分配等),编组速度正在减慢。执行时间只有几微秒,因此小于0毫秒。对于计时,我使用DateTime.Now对象的减法。DateTime.Now对于短时间的计时非常不准确。你必须用秒表代替。阅读:部分错误#5:用时钟代替秒表。WinRT是建立在COM之上的。它通过将工作线程的调用封送到创建对象的线程,为单元线程对象提供自动线程安全。那太贵了。除了双线程上下文切换之外,拥有对象的线程中的延迟通常是迄今为止最明显的开销。毫秒是可能的。