При тестировании многоадресного UDP-сервера, который я написал для Windows 7 Ultimate x64, я наткнулся на очень любопытную вещь. Воспроизведение музыки с помощью foobar2000 в фоновом режиме значительно улучшило скорость передачи данных сервера, но также привело к незначительной потере пакетов. Выключение музыки сразу же снизило скорость передачи до ниже допустимого уровня, но также привело к нулевой потере пакетов. (У меня есть клиентское приложение, которое разговаривает с сервером и сообщает о неподтвержденных пакетах)
Мне известно о дросселировании в Vista (и более поздних версиях), чтобы мультимедийные и сетевые приложения работали вместе, но я, конечно, не ожидал, что воспроизведение музыки улучшит производительность сети или что ее отключение значительно снизит производительность сети.
Что я могу сделать с точки зрения кода в моем серверном приложении, чтобы оно работало стабильно независимо от того, воспроизводит ли музыку музыку в Vista и более поздних версиях? Я определенно хотел бы избежать необходимости информировать всех моих клиентов о том, как настроить их реестр для получения приемлемых скоростей передачи, а также не хотел бы, чтобы они просто «проигрывали музыку», чтобы также получить приемлемые скорости передачи. На мой взгляд, приложение должно «просто работать».
Я думаю, что решение включает в себя что-то вроде приоритетов процессов, MMCSS или, возможно, какой-то другой неясный вызов Windows API, чтобы заставить его делать The Right Thing (TM) здесь.
Кроме того, извините, но создание воспроизводимого тестового примера - нетривиальный объем работы. Дросселирование происходит только тогда, когда драйвер физического сетевого адаптера активно выполняет работу и не может быть воспроизведен с помощью интерфейса обратной связи. Потребуется реализация клиента, реализация сервера и физическое сетевое оборудование для тестирования.