从other questions的答案我了解到OS / TCP堆栈负责发送ACK。这会发生在哪个过程中?
用于TCP的System.Net.Sockets.Socket
对象是否可以以尽快发送ACK的方式进行配置,最好是独立于垃圾收集?
背景和详细信息:
我有一个.NET应用程序,它使用TCP从设备接收数据,并从计算机到设备直接进行网络连接。
设备以大约30 MB / s的速度不断创建数据,并通过网络发送。它使用缓冲区来存储TCP数据包,直到收到ACK。当缓冲区溢出时,设备会因错误而停止。不幸的是,缓冲区的大小只有几KB,这意味着必须在几毫秒内发送ACK。
设备按原样运行,我无法改变它,我必须处理它。
使用相对简单的本机程序已经好几年了,但是面向对象和更复杂的.NET应用程序,它运行不稳定,我有些怀疑有时当垃圾收集器运行时,ACK可能不会很快发送。
现在我可以更改一些内容(例如,更改套接字设置,更改GC设置,减少分配,或者在设备和计算机之间进行切换等更激烈的操作)。到目前为止我的尝试都没有成功(除了开关),这就是为什么我想了解发生了什么。
我设置Socket.NoDelay = true
。
问题:
是在应用程序的过程中还是在不同的进程中发送ACK?如果在这个过程中,这是否受.NET垃圾收集器的影响?可以做些什么来更快地发送ACK?