Я недавно подключил пользовательский кодер (использует двоичный кодер для фактического кодирования и Gzip-компрессор для сжатия массива байтов).Работает нормально.Теперь проблема в том, что при небольшом размере сообщения он надувает байтовый массив.Я хотел бы знать, есть ли способ избежать этого.В частности, если есть способ, которым я могу применить сжатие и декомпрессию условий.
Я пытался сделать что-то вроде - поместите условие
if(buffer.Count <= 5000)
skip compression
Но проблема в том, что декомпрессия на другом конце будетпроизойдет, даже если байты не сжаты.Я надеюсь, что это имеет смысл.
Ниже приведены функции, в которых происходит сжатие и распаковка (фрагмент кода из CompactMessageEncoder)
public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
{
ArraySegment<byte> decompressedBuffer = DecompressBuffer(buffer, bufferManager);
LogWrite("Decompressed from {0} bytes to {1} bytes", buffer.Count, decompressedBuffer.Count);
Message returnMessage = _innerEncoder.ReadMessage(decompressedBuffer, bufferManager);
returnMessage.Properties.Encoder = this;
return returnMessage;
}
public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
{
var buffer = _innerEncoder.WriteMessage(message, maxMessageSize, bufferManager, messageOffset);
var compressedBuffer = CompressBuffer(buffer, bufferManager, messageOffset);
LogWrite("Compressed from {0} bytes to {1} bytes", buffer.Count, compressedBuffer.Count);
return compressedBuffer;
}