我有一个客户端服务器应用程序,它为客户端请求的数据交换XML文档。本质上,用户输入一些搜索约束(要匹配的属性),客户端与两个系统通信以获取数据(来自数据库的一些数据和来自文件服务器的一些数据)。
从文件服务器返回的数据(存档数据的文件)比从服务器返回的元数据要大得多,相应地需要更多的时间来执行。
用户要求我提供一些指标,说明下载存档数据所需的时间以及下载速度(下载后)。
客户端服务器与异步I / O和众多线程进行通信,因此我不能只使用启动/停止计时器来完成此任务。
我目前的实施方式如下:
起初我认为这种方法还可以,但我有用户报告说,小样本的速率比大样本的速率要低得多,而且一次执行的速率变化很大。
有没有更好的方法来计算这个更能免疫的速度?有意义的是,对于较大的档案,速率会更高,但在测试中我发现它比具有大小的文件高10-40倍,这没有意义。
答案 0 :(得分:2)
在问题中测量的吞吐量假定转移时间是同质的。它不是。在会话开始时有一个设置成本,包括TCP 3次握手和产生结果所需的服务器时间。设置完成后,其余部分主要由网络吞吐量决定。
对于大型有效负载,设置时间只占总传输时间的一小部分,因此计算的吞吐量接近您的预期。对于小型有效载荷,测量的时间主要是设置时间!因此,计算出的吞吐量可能会下降几个数量级。
你能做什么?找到一种方法从设备中删除设置组件。
如果您可以在数据开始到达时收到通知,则可以在那里开始计时。这应该适用于除最短响应之外的所有响应(内容适合单个网络数据包。)
或者,让服务器在发送之前将时间戳附加到响应。您可以将其用作开始时间,注意调整机器之间的任何时钟差异。