低延迟(高响应)Windowsnetworking服务?

我已经使用C#编写了Windowsnetworking服务,该服务旨在运行在Windows 7机器上。 它被devise成能够在一毫秒内处理多个请求,这似乎在大多数情况下是可以应付的,毫不拖延。
有时,在每几千毫秒之后,服务器可能经历高达40ms的长时间延迟,在此期间,客户端发送了尽可能多的数据包,但没有收到单个响应。 突然,服务器将在几毫秒内唤醒并响应所有请求(每个请求的处理时间在0.1ms范围内)。
如何更改我的代码或Windows服务设置以使服务器更具响应性? 最好是尽量减less长时间延迟的峰值(10ms是可以忍受的,<5更合理,<1ms是目标),但延迟的规律性也是一个问题。

谢谢。


编辑:我testing一切的服务器机器是一个Core 2 Duo处理器和SSD存储的笔记本电脑

用垃圾回收器从语言中请求极低和可预测的延迟。 在GC线程运行时,GC将每隔Y间隔将程序暂停X毫秒。

如果您愿意,可以使用Windows性能工具包进行validation。

你可以稍微调整垃圾收集器

GCSettings.LatencyMode = GCLatencyMode.LowLatency; 

但最终还是要运行的。

这是你看不到用C#编写的大片3D游戏的原因之一。

调整GC,如果你想,但我认为这种types的应用程序的最佳解决scheme是切换到本机代码。


你也在Windows 7上运行,它被configuration为比服务器操作系统更短的线程量,这意味着它的上下文交换更频繁。 (具有讽刺意味的是,这是机器感觉更为快捷。)

您可以使用“ 调整后台服务最佳性能 ”设置来更改此设置。 这是一个系统范围的设置,是Windows Server的设置。 它所做的是使系统的线程量更长,这意味着线程在另一个线程调度决策之前运行很久,这意味着更less的上下文切换。 这个想法是,在线程量较大的情况下,服务器线程一旦被线程调度器select执行,将能够继续运行更长的时间,并有更好的机会完成其工作(即服务客户端请求),然后被中断/抢先于系统上的另一个线程。


最后,如果以上都不能帮助你,那可能是别的。 此时,您需要使用Windows Performance Toolkit来分析系统,并且您可能会发现延迟突发实际上是由NIC驱动程序,Windows过滤平台,I / O堆栈中的某些东西造成的……谁知道。