我正在尝试从服务器下载一个大约500 Mb的大文件,但我没有将该文件保存到文件系统,而是试图处理它"在运行中",检索一些块数据,分析它们,当有足够的信息时,将它们保存到数据库中。这是我想要做的:
byte[] buffer = new byte[64 * 1024];
using (HttpResponseMessage response = await httpClient.GetAsync(Server + file, HttpCompletionOption.ResponseHeadersRead))
using (Stream streamToReadFrom = await response.Content.ReadAsStreamAsync())
{
int wereRead;
do
{
wereRead = await streamToReadFrom.ReadAsync(buffer, 0, buffer.Length);
// Do the processing and saving
} while (wereRead == buffer.Length);
我尝试使用64k的缓冲区,因为我需要处理的数据块大小相当。我的理由是,因为我正在等待'在ReadAsync上,方法调用将不会返回,直到缓冲区已满,但情况并非如此。该方法返回时只读取7k到14k字节。我试图使用一个小得多的缓冲区,但无论如何我的处理速度远远高于下载的速度,所以使用4k缓冲区我可能在第一次迭代时有一个完整的缓冲区,但是只有第二次的3k迭代。
在我的情况下是否会推荐一种方法?基本上,我希望ReadAsync仅在缓冲区已满或者到达流末尾时才返回。