Podczas testowania serwera multiemisji UDP, który napisałem na Windows 7 Ultimate x64, natknąłem się na najbardziej interesującą rzecz. Odtwarzanie muzyki za pomocą foobar2000 w tle znacznie poprawiło szybkość transmisji serwera, ale również poniosło niewielką utratę pakietów. Wyłączenie muzyki natychmiast obniżyło prędkość transmisji poniżej akceptowalnych poziomów, ale również spowodowało utratę pakietów. (Mam aplikację kliencką, która komunikuje się z serwerem i zgłasza niepotwierdzone pakiety)Najlepsze praktyki wysokowydajnych aplikacji sieciowych
Jestem świadomy dławiącego (i up) zachowania Vista, aby media i aplikacje sieciowe dobrze się ze sobą grały, ale na pewno nie spodziewałem się, że gra Muzyka poprawiłaby wydajność sieci, a także znacznie go obniżyła.
Co mogę zrobić z punktu widzenia kodu w mojej aplikacji serwerowej, aby konsekwentnie realizować odtwarzanie muzyki w systemie Vista i nie? Z pewnością chciałbym uniknąć informowania wszystkich moich klientów o tym, jak poprawić ich rejestr, aby uzyskać akceptowalne stawki transmisji, i chciałbym również uniknąć sytuacji, w której po prostu "odtwarzałbym muzykę", aby uzyskać akceptowalne stawki transmisji. Aplikacja powinna "po prostu działać" w mojej opinii.
Myślę, że rozwiązanie to obejmuje coś podobnego do priorytetów procesów, MMCSS lub być może jakieś inne niejasne wywołanie interfejsu Windows API, aby zmusić go do zrobienia The Right Thing (TM) tutaj.
Przykro mi, ale tworzenie powtarzalnego przypadku testowego to nietuzinkowa ilość pracy. Zachowanie dławienia występuje tylko wtedy, gdy sterownik fizycznej karty sieciowej aktywnie wykonuje pracę i nie może być odtworzony za pomocą interfejsu pętli zwrotnej. Do przetestowania potrzebna byłaby implementacja klienta, implementacja serwera i fizyczny sprzęt sieciowy.
Kiedy mówisz "odtwarza muzykę", masz na myśli, że odtwarza muzykę w HD i używa karty dźwiękowej? Czy jest to przesyłanie strumieniowe za pośrednictwem tej samej karty sieciowej? – Toad
@reinier: Tak, foobar2000 powoli ładuje dane z HD i przesyłane strumieniowo audio do mojego zewnętrznego interfejsu audio przez USB 2.0. –