【发布时间】:2011-06-08 08:08:40
【问题描述】:
我正在开发一个包含两个组件的分布式应用程序。一种是用标准 C++(非托管 C++ 并在 Linux 平台上运行)编写的,另一种是用 C# 编写的。两者都通过消息总线进行通信。
我有一种情况,我需要将对象从 C++ 传递到 C# 应用程序,为此我需要在 C++ 中序列化这些对象并在 C# 中反序列化它们(类似于 .NET 中的编组/取消编组)。我需要以二进制而不是 XML 执行此序列化(由于性能原因)。
当两端都用 C++ 实现时,我使用 Boost.Serialization 来执行此操作,但现在我在一端有一个 .NET 应用程序,Boost.Serialization 不是一个可行的解决方案。
我正在寻找一种允许我跨 C++ 和 .NET 边界执行(反)序列化的解决方案,即跨平台二进制序列化。
我知道我可以在 C++ dll 中实现(反)序列化代码并在 .NET 应用程序中使用 P/Invoke,但我想保留它作为最后的手段。
另外,我想知道如果我使用像 gzip 这样的标准,那会有效吗? gzip还有其他替代品吗?它们的优缺点是什么?
谢谢
【问题讨论】:
-
我最好的建议是不要这样做。使用 json、xml 或其他方式传输数据。首先实施,如果它最终太慢,那么分析什么需要时间......
-
我从 XML 序列化开始,与二进制序列化(两端都运行 c++ 应用程序)相比,它确实证明更慢。这就是我首先选择 Boost.Serialization 的原因。
-
你有没有考虑过开发一个简单的COM应用程序,据我所知C++和.NET都支持COM技术。
-
查看我关于不同格式和性能的博文 - maxondev.com/…
标签: c# c++ ipc marshalling boost-serialization