私は2つのコンポーネントを持つ分散アプリケーションを開発しています。 1つは標準C++(マネージドC++ではなく、Linuxプラットフォームで実行されています)で書かれ、もう1つはC#で書かれています。どちらもメッセージバス経由で通信しています。C++とC#のバイナリシリアル化/逆シリアル化
オブジェクトをC++からC#アプリケーションに渡す必要があるため、これらのオブジェクトをC++でシリアル化してC#でデシリアライズする必要があります(マーシャリング/ .NETでのマーシャリング解除など) 。私はバイナリでこのシリアル化を実行する必要があります(パフォーマンス上の理由から)。
Boost.Serialization
は、両端がC++で実装されているが、片方の側に.NETアプリケーションがあるため、Boost.Serialization
は実行可能な解決策ではありません。
私は、C++と.NETの境界を越えて(de)シリアライズを実行できるソリューション、すなわちクロスプラットフォームバイナリシリアル化を探しています。
私はC++ DLLに(de)シリアライゼーションコードを実装し、.NETアプリケーションでP/Invoke
を使用することができますが、最後の手段としてそれを保持したいと思います。
また、私はgzipのような標準を使用しているかどうかを知りたいと思いますが、これは効率的でしょうか? gzipに代わる方法はありますか?彼らの長所と短所は何ですか?
ありがとうございました
私の最高の提案はしないことです。 json、xmlなどを使用してデータを転送します。それが遅すぎると時間がかかっているかどうかを分析してください。 – Cine
XMLシリアル化から始めましたが、バイナリシリアル化(両端でC++アプリケーションを実行している)と比較して遅くなっています。これがBoost.Serializationを最初に選択した理由です。 –
シンプルなCOMアプリケーション、C++、およびC++の開発を検討しましたか?NETは私が知る限りCOM技術をサポートしています。 –