2013-01-24 29 views
4

在.NET中,httpResponse.end()的描述指出「將所有當前緩衝的輸出發送到客戶端」。任何人都可以向我解釋這是什麼意思?具體是什麼'緩衝輸出'?我在問,因爲我被要求用HttpContext.Current.ApplicationInstance.CompleteRequest()替換httpResponse.end。當涉及到文件時,這會造成問題,所以我猜這個短語與它有關。來自httpResponse.end()的緩衝輸出?

+0

什麼是導致問題和什麼類型的問題? –

+0

藝術做一個MSDN谷歌搜索,你可能會得到一個更快的答覆,因爲你將能夠讀取什麼和每一個意味着 – MethodMan

+0

當你寫入一個流,你寫入它的數據通常不會立即傳輸。它進入一個緩衝區,保存要發送的數據。當一個流被刷新時,緩衝區中的數據被髮送並且緩衝區被清除。它有效地說它正在沖淡迴應。 –

回答

1

緩衝輸出是您的程序已經生成但尚未轉發到其預定目的地的輸出。

緩衝與I/O操作有很大關係,以避免以小增量發送/寫入數據的成本:在寫入時不會將輸出傳遞到目標,系統會將更大的數據塊收集到內存中稱爲「緩衝區」的區域,並且僅在達到特定大小時才發送/寫入數據。

有兩種方法的緩衝數據使得到它的目的地:

  1. 輸出的量達到一定的閾值時,或
  2. 調用一些方法來「刷新」緩衝明確。

httpResponse.end就是這樣一種方法:它通過將所有已寫入的內容發送到客戶端來清空緩衝區。

1

緩衝輸出意味着任何準備發送到客戶端但尚未發送到客戶端的輸出。

2

不是在您將它寫入輸出流後立即發送每一位信息,而是存儲您在內存中寫入的內容,直到它具有「足夠」的數據,並認爲值得花時間發送它給客戶。根據緩衝數據的上下文和原因,緩衝區的大小可能有很大差異。刷新緩衝區是爲了處理緩衝區中的所有未決數據(在這種情況下,處理意味着通過網絡將其發送到客戶端)。這就是你的情況end

緩衝可以做很多原因,但通常這是一個性能問題。如果您爲寫入流中的每個字符發送了一個網絡數據包,或者(在很多情況下)每個字符串都傳遞給Write,那將是非常浪費和耗時的。通過發送更少,更大的信息包,應用程序的執行速度會更快。