使用 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);
至于这是否实际上更有效 - 这需要在您的特定环境中进行基准测试才能决定,因为它可能取决于响应大小、网络速度等。
目前我使用两步法从 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);
至于这是否实际上更有效 - 这需要在您的特定环境中进行基准测试才能决定,因为它可能取决于响应大小、网络速度等。