【发布时间】:2013-02-20 14:18:12
【问题描述】:
我正在尝试为我正在进行的当前项目提出设计候选者。它的客户端接口基于公开公共方法和回调的 WCF 服务。请求一直路由到执行计算、操作等的 C++ 库(使用 boost)。
当前方案基于 WCF 服务通过 IPC 与单独的本机 C++ 进程通信。
为了让事情更简单一点,这里有一个建议采用混合模式(即有一个 .NET 进程在其中加载本机 C++ 层,很可能通过一个非常薄的 C++/ CLI 层)。主要关注的是垃圾收集或其他 .NET 方面是否会阻碍进程的非托管 C++ 部分的性能。
我开始查找安全点和 GC 辅助方法(例如 KeepAlive() 等)的概念,但我找不到任何关于此或基准的直接讨论。据我目前所知,安全点之一是如果一个线程正在执行未管理的代码,并且在这种情况下垃圾收集不会不暂停任何线程(这是正确的吗?)来执行清理。
我想我的主要问题是在同一进程中运行这两种类型的代码而不是在单独的进程中运行时,本机端存在性能问题。
【问题讨论】:
-
单个进程几乎总是更快。唯一的问题是 多少 快(至少从我所见)。
-
谢谢,杰弗里。因此,在您看来,将托管到非托管的转换/thunking 排除在等式之外,您相信 本机代码 执行性能实际上是相同的,无论它是在纯本机进程还是混合 -模式过程,对吗?
标签: c++ .net garbage-collection c++-cli ipc