【发布时间】:2010-12-16 07:04:06
【问题描述】:
我想使用 TcpClient 创建带宽估算工具。我遇到的问题是,我想在预定义的时间内执行测量(而不是预定义要传输的缓冲区数据长度)。如果我使用循环(重复传输小块数据),会不会降低性能(手动分片与自动分片)?
【问题讨论】:
标签: c# networking bandwidth tcpclient
我想使用 TcpClient 创建带宽估算工具。我遇到的问题是,我想在预定义的时间内执行测量(而不是预定义要传输的缓冲区数据长度)。如果我使用循环(重复传输小块数据),会不会降低性能(手动分片与自动分片)?
【问题讨论】:
标签: c# networking bandwidth tcpclient
这取决于您是否禁用 Nagle 算法。如果你这样做了,那么是的,你自己会分裂事物。如果你不这样做,你不太可能实现你的目标 - 因为当你认为数据可能实际上被写入时......除非连接的另一端发回一个 final "确认”当然。
我建议您使用一个较小的样本来计算粗略的速度,然后在此基础上创建一个更大的样本,预测需要多长时间。无论如何,您都需要测量时间 - 这不像您要达到 准确 预定义的时间 - 所以它不应该有太大的区别。无论如何,您始终可以在一定程度上调整大小 - 我预计您最终会发送大量数据包,除非它是一个非常慢的网络,所以如果您决定中途只发送 200K 而不是 300K,应该没什么区别。
当然,这可能听起来像您最初的建议 - 但我只是在谈论每次调用发送“相当大”的数据块......比如说 16K。 (无论如何,比数据包的大小要大得多。)这不会对碎片产生太大影响,但仍然可以让您在进行过程中进行一些调整。我不建议你发送极小的数据包。
【讨论】: