首页 > 解决方案 > 使用 gzip 压缩的 msgpack 序列化性能不佳

问题描述

以下将数据序列化为字节数组的代码片段在高负载(3k req/h)时非常慢。通常需要几十秒才能完成,但有时会超过 30 分钟(平均数据大小约为 1.5 MB)。如何确定问题出在哪里?

                        var packer = new MsgPackDataWrapper<ResponseData>();
                        packer.RegisterOverridingSerializer(new NullableDecimalSerializer(packer.Context));
                        packer.RegisterOverridingSerializer(new NullableDateTimeSerializer(packer.Context));
                        response.Data = packer.SerializeCompressed(syncData);

压缩:

    public byte[] SerializeCompressed(T source)
    {
        var data = this.Serialize(source);

        using (var compressedStream = new MemoryStream())
        {
            using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress))
            {
                zipStream.Write(data, 0, data.Length);
                zipStream.Close();
                return compressedStream.ToArray();
            }
        }
    }

msgpack 序列化:

    public byte[] Serialize(T source)
    {
        var serializer = context.GetSerializer<T>(source);
        
        using (var ms = new MemoryStream())
        {
            serializer.Pack(ms, source);
            
            return ms.ToArray();
        }
    }

标签: c#.netserializationgzipmsgpack

解决方案


推荐阅读