簡體   English   中英

什么時候C#Webclient.OpenRead實際下載數據?

[英]When do a C# Webclient.OpenRead actually download data?

我找到了Python的答案 它適用於C#WebClient.OpenRead嗎?

在以下示例中:

  1. OpenRead是否一次下載所有csv文件(因此ReadLine是指本地 Stream)?
  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
}

它取決於協議,下載大小與緩沖區大小,甚至可能取決於Web服務器配置。 內部使用的HttpWebResponse的實現從ConnectStream讀取所有內容, ConnectStream能夠透明地去塊:

ConnectStream在參考源中

即使在需要解碼或解壓縮的情況下,流也被正確鏈接,因此實現顯然能夠流式傳輸數據而無需在本地預先下載所有內容。
實際上,當你不讀取流結束時,.NET http棧會盡可能地立即緩沖 這些帖子可能是一個有趣的讀物:

要證明您的情況,請打開網絡跟蹤 ,因為HttpWebResponse將轉儲有關連接,延續等的信息。或者使用任何其他網絡嗅探工具。 確保文件足夠大以查看效果。

嚴格來說,它永遠不會是“本地流”,但底層緩沖區將保留所請求文件的數量(如果不是全部),而不是您在第一次閱讀時要求的數量。

文檔判斷,一旦調用OpenRead ,就會發送HTTP GET請求

為從資源下載的數據打開可讀流,並將URI指定為String。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM