gpt4 book ai didi

c# - C# Webclient.OpenRead 何时实际下载数据?

转载 作者:行者123 更新时间:2023-11-30 16:45:27 25 4
gpt4 key购买 nike

我找到了 this answer对于 Python。它适用于 C# WebClient.OpenRead 吗?

在下面的例子中:

  1. OpenRead 是否一次下载所有 csv 文件(因此 ReadLine 指的是本地流)?
  2. 像在 Python 中一样,下载是否是通过连续的 ReadLine 逐步完成的?

代码示例

WebClient client = new WebClient();
Stream stream = client.OpenRead("http://www.MyWebsite.com/FileToDownload.csv");
StreamReader csvFile= new StreamReader(stream);
while (!csvFile.EndOfStream)
{
string line = csvFile.ReadLine();
//do stuff with line
}

最佳答案

这取决于协议(protocol)、下载大小与缓冲区大小,甚至可能取决于网络服务器配置。内部使用的 HttpWebResponse 的实现从 ConnectStream 中读取所有内容,它能够透明地去分块:

ConnectStream in reference source

即使在需要解码或解压缩的情况下,流也会正确链接,因此该实现显然能够流式传输数据,而无需预先在本地下载所有内容。
但是在实践中,.NET http 堆栈尽可能多地立即缓冲,当您没有读取流结束时也是如此。这些帖子可能很有趣:

为了证明你的情况,打开Network Tracing ,因为 HttpWebResponse 随后将转储有关连接、延续等的信息。或者使用任何其他网络嗅探工具。确保文件足够大以查看效果。

严格来说,它永远不会是“本地流”,但底层缓冲区将容纳比您在第一次读取时请求的更多(如果不是全部)请求的文件。

关于c# - C# Webclient.OpenRead 何时实际下载数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42145032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com