首页 > 解决方案 > 将 POCO 列表转换为 JSON 序列化字符串列表

问题描述

背景: 我有一份将数据上传到 BigQuery 的工作,我希望加快速度。为了上传 API,需要序列化数据行的 IEnumerable,而不是标准的 json 数组。

问题: 我目前正在执行以下操作:

    public async Task InsertCatalogItemsAsync(IEnumerable<CatalogItem> items)
    {

       //---THIS IS THE PART SLOWING ME DOWN---
       IEnumerable<string> jsonItems = items.Select(i =>
      {
          var serializedItem = JsonSerializer.Serialize(i);
          return serializedItem;
      }).ToList();
       //^^^^^^THIS IS THE PART SLOWING ME DOWN^^^^^

      //upload to BigQuery
      await _table.UploadJsonAsync(jsonItems);
    }

但这运行有点慢,我正在寻找有关如何使其更快的任何想法。

更新 根据一些评论提供更多上下文,对于 1000 项的页面大小,以下是步骤和时间:

我尝试了其他一些事情:

标签: c#json.net

解决方案


我注意到当我运行该作业时,我的机器上的 CPU 利用率几乎没有上升,所以我决定并行运行序列化。该解决方案将序列化 1000 条记录的时间从 30-40 秒缩短到 8-9 秒。

public async Task InsertCatalogItemsAsync(IEnumerable<CatalogItem> items)
    {
       //---CHANGED THE SELECT STATEMENT TO RUN IN PARALLEL---
        IEnumerable<string> jsonArray = items.AsParallel().Select(i =>
      {
          var serializedItem = JsonSerializer.Serialize(i);
          return serializedItem;
      }).ToList();
        //upload to BigQuery
        await _table.UploadJsonAsync(jsonArray);

    }

推荐阅读