在测试我在 Windows 7 Ultimate x64 上编写的 UDP 多播服务器时,我遇到了一件非常奇怪的事情。在后台使用 foobar2000 播放音乐显着提高了服务器的传输速率,但也有轻微的丢包。关闭音乐立即将传输速率降至可接受的水平以下,但也产生了 0 数据包丢失。(我有一个客户端应用程序与服务器对话并报告未确认的数据包)
我知道 Vista(及更高版本)的节流行为使媒体和网络应用程序可以很好地一起运行,但我当然没想到播放音乐会提高网络性能,也没有想到将其关闭会如此显着降低网络性能。
从我的服务器应用程序的代码的角度来看,我能做些什么,以便无论在 Vista 及更高版本上是否播放音乐,它都能始终如一地执行?我当然希望避免通知我所有的客户如何调整他们的注册表以获得可接受的传输速率,并且也希望避免让他们简单地“播放音乐”以获得可接受的传输速率。在我看来,该应用程序应该“正常工作”。
我认为该解决方案涉及类似于进程优先级、MMCSS 或其他一些模糊的 Windows API 调用,以使其在此处执行 The Right Thing(TM)。
另外,很抱歉,创建可重现的测试用例是一项非常重要的工作。仅当物理 NIC 的驱动程序正在积极工作并且无法使用环回接口重现时,才会发生限制行为。需要一个客户端实现、一个服务器实现和物理网络硬件来进行测试。