【问题标题】:How to serialize a large object, zip it and upload to Azure Storage Blob in efficient way如何以有效的方式序列化大对象、对其进行压缩并上传到 Azure 存储 Blob
【发布时间】:2021-09-24 22:10:01
【问题描述】:

有没有一种有效的方法来序列化 C# 中的大对象(使用 JSON.Net 或其他库)> Zip 它并将其上传到 Azure 存储 Blob。

在没有流的情况下逐步执行操作会在第一步中导致OutOfMemory Exception

  1. 使用 JSON.Net 将数据模型序列化为字符串
  2. 将此字符串数据压缩到字节数组中
  3. 使用 Azure Blob Storage UploadText 方法将其上传到 Azure Blob Storage。

【问题讨论】:

  • 所以在序列化对象时出现异常?
  • @Thomas - 是的,但是,如果前者通过,我在压缩和反序列化时也遇到了 OOM 异常。
  • oyu 可以分享你的实际代码吗?

标签: azure stream azure-blob-storage


【解决方案1】:

可能有点晚了,但您可以使用流 api 而无需压缩来处理这个问题。假设您可以在不拉动的情况下逃脱:

using System.Text.Json;
using Azure.Storage.Blobs.Specialized;

public async Task WriteAsync<T> (T data, string blobId)
{
    var client = containerClient.GetBlockBlobClient(blobId);
    await using var ms = await client.OpenWriteAsync(true);
    await JsonSerializer.SerializeAsync(ms, data);
}

您可以在我的blog 上阅读更多关于我如何做到这一点的信息

【讨论】:

  • 感谢您的回答,最后我能够通过自己编写一个序列化器-反序列化器对来更有效地完成它,它将数据序列化为 byte[],然后将数据推送到 blob。写入的数据大小要小得多,CPU 使用率和磁盘 IO 都非常低。已经有一段时间了,但对于非常大的对象 IIRC,它的效率约为 300 倍。
猜你喜欢
  • 2021-09-28
  • 2014-08-05
  • 2017-04-04
  • 2020-12-16
  • 2017-02-28
  • 2022-01-18
  • 2016-04-30
  • 2021-11-19
  • 2017-03-15
相关资源
最近更新 更多