Как минимизировать сериализованные данные - двоичная сериализация имеет огромные накладные расходы - PullRequest
2 голосов
/ 24 марта 2012

Я бы хотел уменьшить размер сообщения при отправке по сети сериализованного целого числа. В приведенном ниже разделе buff.Length равно 256 - для увеличения накладных расходов необходимо быть эффективным! Как его можно уменьшить до минимума (4 байта + минимальные издержки)?

            int val = RollDice(6);
            // Should 'memoryStream' be allocated each time!
            MemoryStream memoryStream = new MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(memoryStream, val);
            byte[] buff = memoryStream.GetBuffer();

Спасибо заранее, --- КостаЗ

1 Ответ

1 голос
/ 24 марта 2012

Взгляните на protobuf.net ... Это очень хорошая библиотека сериализации (вы можете получить ее на NuGet). Кроме того, в идеале вы должны использовать оператор "using" вокруг вашего потока памяти.

Чтобы ответить на комментарий ниже, наиболее эффективный метод зависит от вашего варианта использования. Если вы точно знаете, что вам нужно для сериализации, и не нуждаетесь в сериализаторе общего назначения, тогда вы можете написать свой собственный двоичный форматер, который может вообще не иметь служебных данных (здесь есть некоторые детали пользовательские форматеры ).

Эта ссылка содержит сравнение BinaryFormatter и protobuf.net для вашей справки.

...