c# - 使用 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();
}
}
解决方案
推荐阅读
- containers - RunC 和 RunQ 容器运行时有什么区别?
- awk - 仅打印每行的第一个和第二个单词以使用 sed 输出
- c# - 如何解决 docker-compose 环境变量不起作用 ASP.Net Core MVC
- excel - VBA 公式填充一行太远
- user-interface - Slack Modal 视图:在最终提交之前将堆栈扩展至 3 个以上
- amazon-s3 - 将数据从 AWS 3 存储桶同步到 Azure Data Lake Gen 2 的最佳方法是什么
- bash - Github 操作 - 错误:进程已完成,退出代码为 1
- flutter - 如何在 Flutter Web 中插入 HTML 标签?
- go - 在本地测试依赖于环境变量的应用程序
- graphdb - 是否可以删除 GraphDB 中的日志?