簡體   English   中英

HttpWebRequest和HttpWebResponse是理想的異步緩沖區大小

[英]HttpWebRequest and HttpWebResponse ideal async buffer sizes

我正在嘗試在.NET 3.5中使用HttpWebRequest和HttpWebResponse,以異步方式運行它們:BeginGetRequestStream,EndGetRequestStream,BeginWrite,EndWrite,BeginGetResponse,EndGetResponse,BeginRead,EndRead - 處理請求的所有部分都是異步的。

我有幾個線程發送大量並發請求。 EndRead和EndWrite都是阻塞操作 - 它們在對流完成實際讀/寫操作時阻塞當前線程,我正在嘗試為這些操作提供理想的輸入/輸出緩沖區大小。

我的理由是這樣的:因為我一次有多個活動請求,他們將繼續觸發回調,讓線程知道有一些數據可用或數據已發送。 如果我的緩沖區很大,通過線路讀取/寫入數據將花費更長時間,因此EndRead / EndWrite將阻塞更長時間。 這會強制同一線程上的其他請求等待一段時間,因為它們的通知必須等到線程被解除阻塞。

所以,我的問題是,在這種情況下,什么是良好的讀/寫緩沖區大小。 我在考慮每個2048字節,但我在各種博客中看到的一些示例代碼顯示了截然不同的值。

提前感謝任何想法。

除了避免明顯的極端情況之外,對於您應該設置的實際值沒有確定的規則。 這實際上取決於您要傳輸的數據類型,以及有多少數據。 您可能希望將寫入緩沖區設置得相當高,但要將讀取緩沖區保持在較低水平。 這是因為當涉及到這種事情時,寫入(通常)比讀取更昂貴。

在這種情況下,最好的辦法是嘗試一些值,看看它們的擴展程度。 如有必要,您可以隨時更改它們。

我認為更好的解決方案是不要過多擔心緩沖區大小,但不要阻塞線程。 如果將委托傳遞給Begin*方法的callback參數,則在操作完成時執行該回調,並且可以從那里調用End* ,這將(幾乎)立即返回。 無需阻止。

關於緩沖區大小,如果它們對您真正重要,您應該剖析並找出在您的特定情況下最有效的方法。

暫無
暫無

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

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