使用 CSVHelper 从 HttpResponseMessage 解析 CSV

Parsing CSV from HttpResponseMessage using CSVHelper

目前我使用两步法从 Web 获取数据 Api 和 将 CSV 记录反序列化为对象。

var response = await httpClient.GetAsync(queryString);
using (var reader = new StreamReader(await response.Content.ReadAsStreamAsync()))
{
    var csvr = new CsvReader(reader);
    var responseValue = csvr.GetRecords<TrainingDataSetData>().ToList();
    result.Readings.AddRange(responseValue);
}

如何优化此代码?

如果您试图避免创建中间 MemoryStream - 您可以在 HttpClient 上使用 GetStreamAsync 方法,这应该 return 原始 NetworkStream 直接传递给 CsvHelper,而不是 ReadAsStreamAsync,这将默认在 returning.

之前将完整响应读入 MemoryStream
using (var reader = new StreamReader(await httpClient.GetStreamAsync(queryString)))
{
    var csvr = new CsvReader(reader);
    var responseValue = csvr.GetRecords<TrainingDataSetData>().ToList();
    result.Readings.AddRange(responseValue);
}

如果您仍然需要访问 HttpResponseMessage,您可以通过使用 HttpCompletionOption.ResponseHeadersRead 来达到相同的效果,它不会在 returning 之前缓冲响应。

var response = await httpClient.GetAsync(queryString, HttpCompletionOption.ResponseHeadersRead);

至于这是否实际上更有效 - 这需要在您的特定环境中进行基准测试才能决定,因为它可能取决于响应大小、网络速度等。