Данное программное обеспечение является родным приложением C++/MFC, которое получает большой объем данных по UDP, а затем обрабатывает данные для отображения, вывода звука и записи на диск между прочим. Сначала я столкнулся с проблемой, когда документ справки CHM приложения был запущен из меню справки, а затем я щелкнул по документу справки при сборе данных с аппаратного обеспечения. Чтобы воспроизвести это, сценарий AutoHotkey был использован для быстрого нажатия в справочном документе во время работы приложения. Как только в системе произошел какой-либо звук, я начал получать ошибки.Что приводит к низкой производительности сети при воспроизведении аудио или видео в Windows Vista и новее?
Если у меня звуковая карта полностью отключена, все работает нормально, без ошибок, хотя выход звука явно отключен. Однако, если у меня есть звуковая игра (в этом приложении, другом приложении или даже просто звуковой сигнал из окна сообщения), я получаю тысячи отброшенных пакетов (мы знаем это, потому что каждый пакет имеет временную метку). В качестве второго теста я вообще не использовал свое приложение и просто использовал Wireshark для контроля входящих пакетов с аппаратного обеспечения. Разумеется, всякий раз, когда звук воспроизводился в Windows, мы отбрасывали пакеты. Фактически, звук не должен даже активно воспроизводиться, чтобы вызвать ошибку. Если я просто создаю буфер (используя DirectSound8) и никогда не начну играть, я все равно получаю эти ошибки.
Это происходит на нескольких ПК с несколькими комбинациями сетевых карт (как волоконно-оптических, так и RJ45) и звуковых карт (как интегрированных, так и отдельных карт). Я также пробовал разные версии драйверов для каждой сетевой платы и звуковой карты. Все тесты были на Windows 7 32bit. Поскольку мое приложение использует DirectSound для аудио, я пробовал разные CooperativeLevels (нормальная работа DSSCL_PRIORITY) без успеха.
На данный момент я уверен, что это не имеет никакого отношения к моему приложению, и мне было интересно, есть ли у кого-нибудь представление о том, что может вызвать эту проблему, прежде чем я начну обращаться к поставщикам аппаратного обеспечения и/или к Microsoft.
Известно, что Microsoft построила в ядре Windows Vista некоторые странные функции защиты, которые предотвращают ухудшение производительности ввода-вывода, чтобы убедиться, что мультимедийные приложения (Windows Media Player, directX) получают 100% -ную отзывчивость. Я не знаю, означает ли это также потерю пакетов с UDP. Прочитайте это хромое обоснование для метода: http://blogs.technet.com/b/markrussinovich/archive/2007/08/27/1833290.aspx Один из комментариев объясняет это довольно хорошо: «Кажется, Microsoft пыталась», исправить "то, что не было нарушено". – ypnos
Вы знаете, что это проблема с UDP, правильно? Это ненадежный способ доставки, поэтому проверка ошибок должна быть включена в протокол, внешний по отношению к UDP. Или просто используйте TCP. «Кроме того, у вас есть информация, представленная ypnos - к которой у меня нет видимости/видимости) – KevinDTimm
@KevinDTimm - Я знаю, что UDP по определению является ненадежным. Поскольку он работает без ошибок неограниченно в отсутствие звука (и у меня нет никакого способа изменить аппаратное обеспечение), я ищу решения проблемы, вызванной звуком. ypnos дал хорошую отправную точку, теперь, чтобы найти обходной путь. – bsruth