C# 如何为TCP/IP事务计时

C# 如何为TCP/IP事务计时,c#,performance,datetime,time,tcp,C#,Performance,Datetime,Time,Tcp,我目前有2个客户机-服务器模型。在这两种情况下,我都将大量数据从服务器传递到客户端。我想计算数据在服务器端序列化到客户端接收到所有数据之前需要多长时间;最后,我想看看一个模型比另一个模型快多少 我的问题:做这件事的最好方法是什么 我的抱怨是,这需要在服务器端启动计时器,在客户端设置停止时间。虽然我可以分别计算两台机器的启动和停止时间,但这种方法存在几个问题,例如,两台机器的系统时间不同步、时区差异等 我目前正在查看1个模型的各个指标,并将其与另一个模型进行比较,后者虽然有效,但不能完全反映整个交

我目前有2个客户机-服务器模型。在这两种情况下,我都将大量数据从服务器传递到客户端。我想计算数据在服务器端序列化到客户端接收到所有数据之前需要多长时间;最后,我想看看一个模型比另一个模型快多少

我的问题:做这件事的最好方法是什么

我的抱怨是,这需要在服务器端启动计时器,在客户端设置停止时间。虽然我可以分别计算两台机器的启动和停止时间,但这种方法存在几个问题,例如,两台机器的系统时间不同步、时区差异等


我目前正在查看1个模型的各个指标,并将其与另一个模型进行比较,后者虽然有效,但不能完全反映整个交易时间。

让客户机在收到所有信息后做出响应。这样,服务器就可以知道什么时候进行测量,并且可以自己执行测量。您将测量一个额外的往返行程,但在所有测量中都大致相同。

这里有一个适当的方法:

在客户机上启动计时器,然后调用服务器。服务器要做的第一件事就是启动计时器。在处理结束时,它停止计时器,计算处理所花费的时间,并将该时间返回给客户端

然后,客户机可以从总时间中减去该时间,以确定传输开销(序列化、网络传输时间等),并且除非您的网络相对繁忙,否则单个时间值的返回响应不应该是该时间的重要部分。如果你是学究,你可以做一个测试,做同样的事情,但只发送一个时间值,然后返回时间值,然后你把它除以2,算出一种方法的结果,然后再从时间中减去它

当然,网络通信不是一门精确的科学,从一次调用到下一次调用可能需要不同的时间,因此您可能需要执行一些测试,排除异常值

例如:

启动计时器:0s。 打电话: 收到呼叫:启动新计时器:0s 完成加工:50ms 返回50毫秒 原始接收器得到结果,计时器显示为120毫秒


从120ms减去50ms,你现在有70ms,返回时间有一些模糊区域。

啊,我明白了,所以模糊区域是在假设客户机->服务器的计时器值与服务器->客户机的计时器值大致相同的情况下出现的。这已经足够接近了,但我想我已经接受了一个事实,即获得绝对交易时间并非易事。@nivla12345-好吧,对于类似的参数/返回类型,它们应该是类似的,是的。在一个完美的世界。。当然,网络定时可能因呼叫而异。。所以你必须得到平均值。也许这很有用:不久前,我制作了一个Java类(和一个Javascript库)作为概念证明和起点,供那些希望在网络中以不完美但体面的精度同步机器的人使用:(这精确地指出了客户端机器相对于(时间)的系统时间)服务器,并尝试使用localTime=serverTime+(localResponseTime-localRequestTime)/2这样的公式来消除网络延迟。但关键是它可以通过更复杂、可定制的算法进行扩展)