未管理到托管选项:性能考虑因素

时间:2009-04-30 03:10:52

标签: c# c++-cli

初步:调用者是一个本机EXE,它暴露了一种“插件”架构。它旨在加载DLL(按名称,指定为命令行arg)。该DLL必须是本机的,并导出特定的函数签名。 EXE是C ++,由于EXE是黑盒子(不能修改/重新编译),因此不太重要。本机DLL可以通过在所述DLL中完全实现本地解决方案来满足应用程序需求。但是,要求是允许实际工作(从而将本机DLL转换为薄包装器/网关)以C#编码。这导致我有3个选项(如果有更多,请分享):

  1. Native DLL加载内部使用C#类库的C ++ / Cli DLL
  2. Native DLL通过CCW
  3. 与C#COM对象交互
  4. 本机DLL托管CLR并调用C#assembly
  5. 还有一个要求是,本机DLL不仅需要一种在C#上发送消息(调用函数)的方法,而且C#需要能够在发生某些特殊事件时触发事件/回调到本机DLL(而不是关闭和返回)。现在最后一件事我不知道如何处理第三个选项,但这是另一个问题。

    所以说到:性能。有关这些方法的任何信息(假设它们都满足要求)?从我的调查来看,我的理解是2会有比1更多的开销,但我不是100%自信,这就是为什么我在这里。至于3,我还没有任何信息。

    所以,如果有人处理了这些(或知道另一个优雅的选项),请加入。

    谢谢!

1 个答案:

答案 0 :(得分:0)

我之前做过选项1,取得了合理的成功。我不记得任何重大的性能影响,尽管我的应用程序并不是非常严重的性能。在我看来,如果出现性能问题,可能的罪魁祸首可能是频繁的,小的本地到管理的转换。是否可以在C ++ / CLI层批处理那些?