Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 确定数据包进入网络缓冲区的时间_.net_Sockets_Udp_Udpclient - Fatal编程技术网

.net 确定数据包进入网络缓冲区的时间

.net 确定数据包进入网络缓冲区的时间,.net,sockets,udp,udpclient,.net,Sockets,Udp,Udpclient,我对一个使用UdpClient接收多播UDP数据包的现有程序进行了更改 UDP数据包通过tcpreplay edit-pps=。。。在这些测试中 为了对程序处理传入数据包所需的时间进行原始版本之前/之后与更改版本之间的比较,我在UdpClient.receiving之后直接在接收线程中获取Stopwatch.GetTimestamp的差异,然后在稍后的某个时间点,当数据包在不同的线程中处理时,再次获取Stopwatch.GetTimestamp的差异 问题是,如果更改版本中的接收线程比以前快,比

我对一个使用UdpClient接收多播UDP数据包的现有程序进行了更改

UDP数据包通过tcpreplay edit-pps=。。。在这些测试中

为了对程序处理传入数据包所需的时间进行原始版本之前/之后与更改版本之间的比较,我在UdpClient.receiving之后直接在接收线程中获取Stopwatch.GetTimestamp的差异,然后在稍后的某个时间点,当数据包在不同的线程中处理时,再次获取Stopwatch.GetTimestamp的差异

问题是,如果更改版本中的接收线程比以前快,比如说,因为它只是尽可能快地将接收到的数据包交出来,以便返回接收下一个数据包,而原始版本在接收单个数据包之间做其他事情,那么后处理时间实际上会变得更糟

有没有一种方法可以在不改变接收线程的总体工作方式的情况下确定将数据包添加到网络缓冲区的时间戳

或者我必须添加另一个只接收数据包的线程,添加一个时间戳,并将其放入队列中,以供当前接收数据包的线程在执行其他工作的同时使用

让我们假设我的接收缓冲区总是足够大,或者我的接收线程总是足够快,这样缓冲区就不会填满,这显然会影响测量的时间

记住第一个到达的UDP数据包的时间戳:incomingTimestamp[0] 日志时间戳后处理[packetNo]-输入时间戳[0] 相反,我在问题中所说的最初尝试是timestampAfterProcessing[packetNo]-incomingTimestamp[packetNo]

记录的数字应该独立于各个接收线程中存在的任何延迟,因此可以用于前后比较。这是

假设tcpreplay edit每次以大致相同的时间重播数据包,则至少会重复检查tcpreplay edit每次所花的总时间 确保套接字接收缓冲区不会溢出,否则比较会变得更困难