Jam*_*nne 10 .net c# network-programming bandwidth-throttling windows-7
在测试我在Windows 7 Ultimate x64上编写的UDP多播服务器时,我遇到了一个最奇怪的事情.在背景中使用foobar2000播放音乐显着提高了服务器的传输速率,同时也导致了轻微的数据包丢失.关闭音乐会立即将传输速率降低到可接受的水平以下,但也会造成0个数据包丢失.(我有一个客户端应用程序与服务器通信并报告未确认的数据包)
我知道Vista的(以及更高)限制行为使媒体和网络应用程序很好地协同工作,但我当然没想到播放音乐会提高网络性能,也不会让网络性能降低如此显着.
从我的服务器应用程序的代码角度来看,我能做些什么,以便无论是否在Vista上播放音乐,它都能始终如一地执行?我当然希望避免告知我的所有客户如何调整他们的注册表以获得可接受的传输速率,并且还希望避免让他们简单地"播放音乐"以获得可接受的传输速率.在我看来,应用程序应该"正常工作".
我认为解决方案涉及过程优先级,MMCSS或可能的其他一些模糊的Windows API调用,以使其在此处执行The Right Thing(TM).
此外,抱歉,创建一个可重现的测试用例是一项非常重要的工作.仅当物理NIC的驱动程序正在主动执行工作且无法使用环回接口再现时,才会发生限制行为.人们需要一个客户端实现,一个服务器实现和物理网络硬件来测试.
您观察到的是媒体播放器将机器的时钟分辨率设置为 1 毫秒的副作用。
这只发生在比赛过程中
副作用是 - 您的应用程序具有较小的时间片,这会改善您的应用程序,因为您可能会从应用程序中窃取大量 CPU,并且时间片较长 - 时间较长。
要测试它,您只需将应用程序中的计时器分辨率设置为 1 毫秒,然后在不播放媒体的情况下比较性能。
应该与没有 clores 设置但播放媒体时相同。
| 归档时间: |
|
| 查看次数: |
1807 次 |
| 最近记录: |