我正在尝试为我正在从事的当前项目提出设计候选人。它的客户端接口基于公开公共方法和回调的 WCF 服务。请求一直路由到执行计算、操作等的 C++ 库(使用 boost)。
当前方案基于通过 IPC 与单独的本机 C++ 进程通信的 WCF 服务。
为了让事情更简单一点,这里有一个建议去混合模式(即有一个单一的.NET进程,它在其中加载本机C++层,很可能通过一个非常薄的C++/CLI层与其通信) . 主要关注的是垃圾收集或其他 .NET 方面是否会阻碍进程的非托管 C++ 部分的性能。
我开始查找安全点和 GC 辅助方法(例如 KeepAlive() 等)的概念,但我找不到任何关于此或基准的直接讨论。据我目前所知,安全点之一是如果线程正在执行未管理的代码,并且在这种情况下垃圾收集不会暂停任何线程(这是正确的吗?)来执行清理。
我想我的主要问题是在同一个进程中运行这两种类型的代码而不是拥有单独的进程时,本机端存在性能问题。