2012-02-01 3 views
6

Moja aplikacja WPF ma funkcję, dzięki której renderuje dużą liczbę obrazów w tle podczas aktualizowania interfejsu użytkownika, gdy nowy obraz jest gotowy.Application.Run jest funkcją pochłaniającą najwięcej procesora w mojej aplikacji; co mogę zoptymalizować?

Profilowanie tego procesu pokazało, że Application.Run to funkcja, która wykonuje najwięcej pracy, na poziomie 43%, z "drugim najdroższym" spotem współużytkowanym przez trzy interfejsy graficzne API, z których każdy ma 6%.

Co mógłbym zrobić, aby spędzić tak dużo czasu w Application.Run? Wydaje się, że sednem tej metody jest uruchomienie głównego programu rozsyłającego dla mojej aplikacji, ale to nie pomaga mi zorientować się, co robi dyspozytor tak bardzo. Czy mogę uzyskać bardziej szczegółowy profil? Uwaga: Mam na myśli System.Windows.Application.Run.

Odpowiedz

4

Okazuje się, że Visual Profiler (część WPF Performance Suite) może zapewnić bardziej szczegółowe rozbicie na wykorzystanie procesora:

CPU usage breakdown

To pokazuje, że połowa tej niewyjaśnionej użycie procesora jest w dół do wątek renderujący (więc być może powinienem aktualizować go znacznie rzadziej), a resztę spędzam w moim wywołaniu zwrotnym Invoke (co jest nieuniknione w moim przypadku).

+0

W prawo. Pomyślcie o programie jako cyrkowiec, który wściekle pedałuje, żeby zrównoważyć wysoki stos akrobatów, z których każdy mówi mu, którą drogą iść. On nie jest problemem, problem jest wyższy. Możesz uzyskać te same informacje za pomocą kilku * [stackshots] (http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024# 378024) * wątków i powie Ci dokładnie, które linie kodu były sprawcami. –

Powiązane problemy