Tło: W systemie Windows Vista i nowszych, używając rozszerzonej Core Audio API (Ray Molenkamp i Xavier Flix) egzekwować poziom głośności poprzez zapisanie się na DefaultAudioEndpoint za OnVolumeNotification i ustawienie głośność po zmianie.CoreAudio OnVolumeNotification subskrypcji zdarzenie powoduje wysokie użycie procesora w explorer.exe
Problem: Funkcjonalnie sukces, ale jak tylko abonament OnVolumeNotification jest zarejestrowany, CPU ma tendencję, aby uzyskać sztywny kurs na 30-50% w zależności od mocy procesora. Po wielu kopaniu z Process Processerem & Process Monitor odkryto, że explorer.exe, a czasem svchost.exe, mogą zostać wykorzystane przez wywołania rejestru. Nie jestem pewien, który klucz rejestru. Nie wierzę, abym subskrybował to wydarzenie w sposób szkodliwy, ponieważ starannie zarządzam subskrypcją - jest on uruchamiany tylko raz.
przebieg procesu egzekwowania głośności
- Rezygnacja z końcowym OnVolumeNotification
- zestaw właściwości skalarne objętości końcowych (w trybie natychmiastowym)
- Zapisz do punktu końcowego OnVolumeNotification
Bazowego metody win32 zaangażowani w Core Audio API to RegisterControlChangeNotify i UnregisterControlChangeNotify. Czy to możliwe, że przyczyną problemu są te lub wdrożenie subskrypcji wydarzenia?
Dlaczego nie jest jasne, który klucz rejestru jest czytany? Process Monitor powinien dostarczyć ci tych informacji. Może być pomocny. Czy próbowałeś też debugować explorer.exe? – Simon
@Simon Przepraszam, że nie zauważyłem Twojego komentarza. Nie mogłem znaleźć żadnych konkretnych kluczy, nie jestem w 100% zaznajomiony z ProcMon. Mam zamiar rozwiązać ten problem dla tych, którzy mogą spotkać się z tym samym problemem. – erodewald