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