【问题标题】:Fastest way to communicate between c++ and c#c++ 和 c# 之间通信的最快方式
【发布时间】:2010-10-08 02:15:26
【问题描述】:

我们正在构建一个新的视觉检测系统应用程序。出于多种原因,实际的检查系统需要使用 c++。对于该系统,我们将使用 Boost 和 Qt。

对于我们的 UI,我们目前正在考虑将 WPF/C# 用于 UI 和基于 SQL 的报告。复杂的因素是 UI 必须在与 c++ 检查系统相同的机器上本地运行,或者如果检查系统没有监视器或键盘,则在另一个机器上远程运行。

我们关心的是在两个系统之间传输数据的最快方式是什么?我们目前正在研究使用 Google 协议缓冲区进行序列化的基于套接字的系统。协议缓冲区将为 c++ 和 c#(jskeet/dotnet-protobufs) 生成代码。

有人有什么建议/经验吗?

【问题讨论】:

  • TCP 和 protobuf 听起来不错。您有具体的顾虑或问题吗?
  • protobuf-net 似乎是 .NET 的首选 protobuf 实现。
  • 这是一个我没有太多经验的领域。我想知道是否有更好的选择。
  • 这很大程度上取决于您需要的交互方式。您的问题并不能说明您想在两个系统之间进行通信的内容/方式。您的应用程序可能会受益于作为基础的消息队列基础设施;如果您遵循 RESTful 方法,则可以更轻松地做出架构决策。这真的取决于你想做什么。如果您只需要原始性能,您可以根据套接字和 protobuf 发明自己的协议,它会起作用。
  • 通信单元的频率/数量/大型,可靠性/吞吐量/延迟保证,授权/认证/保密要求,面向消息/服务/资源的架构等。

标签: c# c++ wpf qt networking


【解决方案1】:

如果您真的在寻找与您的 c++ 检查系统进行通信的最快方式,那么我将实现这两​​种情况。使用命名管道的本地接口(参见此处Interprocess communication for Windows in C# (.NET 2.0))和使用谷歌协议缓冲区的远程接口,用于您的检查系统没有连接键盘和/或监视器的情况。 然后用户界面首先尝试在本地盒子上打开一个命名管道,如果失败,用户必须输入一个远程地址进行套接字通信。

希望能有所帮助...

【讨论】:

  • 很好的链接,谢谢。按照 SO Question 50153 上的链接到命名管道绑定类(msdn.microsoft.com/en-us/library/…)。然而,真正有趣的是,从 MSDN 页面上的评论来看,每条消息似乎存在 16k 到 20k 的隐藏限制。这可能会给我们带来问题,因为我们确实有一些消息块会比这更大。
【解决方案2】:

如果你真的想要最快的至少成本,我会看看 zeromq

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2010-09-27
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    相关资源
    最近更新 更多