2010-10-18 43 views
0

使用流時,內存消耗應該與緩衝區的大小相同。然而,當我看下面的代碼時,我不確定流是如何工作的,它使用http請求和響應。 (HttpWebRequest的要準確)有關流和http請求/響應的問題

Stream requestStream = webRequest.GetRequestStream(); 

// Here write stuff to the stream, data is a string. 
webRequest.ContentLength = data.Length;     
byte[] buffer = Encoding.UTF8.GetBytes(data); 

// Obtain request stream from request object so I can send data. 
requestStream = webRequest.GetRequestStream(); 
requestStream.Write(buffer, 0, buffer.Length);     

WebResponse response = webRequest.GetResponse(); 

我可以繼續寫的東西到requestStream,說在一個循環中,而不是僅僅寫一個字符串,但沒有將達到目標服務器,直到調用webRequest.GetResponse ()。 然後,在執行最後一行之前,流(如何)(或哪裏)是由流管理的數據?

+0

除了別的,你的ContentLength可能是錯誤的。你用*字符*給出了長度,而不是以字節爲單位。你應該使用buffer.Length,而不是data.Length。 – 2010-10-18 15:27:15

回答

2

我認爲這取決於HttpWebRequest.AllowWriteBufferStreaming的值。如果此屬性爲true(默認情況下),則請求數據全部緩衝直到您請求響應。

如果它是假的,可以在將數據寫入流時將數據寫入連接。

注意,在這兩種情況下,這將是一個好主意,處分流爲正常:

using (Stream requestStream = webRequest.GetRequestStream()) 
{ 
    requestStream.Write(buffer, 0, buffer.Length); 
} 

你也應該使用using聲明響應。

+0

如果與「使用」一起使用,那麼在處置之前會關閉流? – 2010-10-19 10:17:01

+0

@Abhijeet:處理流關閉它。 – 2010-10-19 10:19:08