繁体   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