ネットワーク特化の爆速シリアライザー
DRANK
ZeroSerializer は IPC やネットワーク経由、その他永続化が不要な経路で高速にデータをやり取りする為の C# Roslyn ソースジェネレーターです。シリアライザーはアセンブリー埋め込み型で、概ね以下の要領で生成されます。ビッグエンディアンの排除以外はめっちゃ普通です。[ZeroSerializer] // 👈 シリアライザーとビュー構造体(後述)を生成 public struct Foo { public int Number { get; } } // 対象が構造体で16バイトより大きければ this in になる(.NET 8.0 以降) public static int Serialize(this Foo source, Memory<byte> buffer) { // ※ ビッグエンディアンのシステムでは常に例外を投げる BinaryPrimitives.WriteInt32LittleEndian(...); } 「ネットワーク経由」に特化したデシリアライズシリアライザーはまあまあ普通なんですがデシリアライザーが特殊です。ネットワーク経由のやり取りでは非同期周りのリスク覚悟でキャッシュしない限り byte[] を確保することになりますが、避けられないなら逆に有効活用しちゃえ! という発想です。結果、アロケーションはもちろんコピーコストも完全にゼロ。プロパティーにアクセスしない限りデシ…
1 comments
「無限大に速いシリアライザ」にとてつもなく既視感があるのは気のせいだろうか...w
zenn.dev/sator_imaging/…
元ネタはこちら (10 年ぶりに記事を見て懐かしんでる)
neue.cc/2016/11/08_542…