Мне было поручено найти (и потенциально исправлять) некоторые серьезные проблемы с производительностью с помощью приложения Flex, которое было доставлено нам. Приложение будет постоянно занимать от 50 до 100% процессора в моменты, когда он просто работает на холостом ходу и ничего не должен делать.
Мой первый шаг состоял в том, чтобы запустить профилировщик, который поставляется с FlexBuilder. Я ожидал найти какой-то метод, который занимал большую часть времени, показывая мне, где было узкое место. Однако я получил что-то неожиданное.
Лучшие 4 метода:
- [enterFrameEvent] - 84% накопленного времени, 32% времени
- [reap] - 20% кумулятивное и самостоятельное время
- [tincan] - 8% кумулятивного и самостоятельного времени
- global.isNaN - 4% кумулятивное и собственное время
Все остальные методы имели менее 1% как для кумулятивного, так и для собственного времени.
Из того, что я нашел в Интернете, методы [скобки] - это то, что списки профилировщиков, когда у него нет фактического метода Flex для отображения. Я заметил, что кто-то утверждает, что [tincan] - обработка запросов RTMP, и я предполагаю, что [reap] - сборщик мусора.
Кто-нибудь знает, что делает [enterFrameEvent] на самом деле? Я предполагаю, что это, по сути, "основная" функция для цикла событий, поэтому ожидается высокое суммарное время. Но почему самооценка так высока? Что на самом деле происходит? Я не ожидал, что внутренняя часть проигрывателя будет занимать столько времени, тем более, что в приложении ничего не происходит (и обновлений обновления пользовательского интерфейса не происходит).
Есть ли какой-нибудь хороший способ найти, что происходит? Я знаю, что что-то происходит, это не должно быть (похоже, должно быть какое-то занятое ожидание или другой цикл бегства), но профилировщик не дает мне никаких результатов, которых я ожидал. Следующим шагом будет добавление операторов отладки трассировки в разных местах, чтобы попытаться отследить, что на самом деле происходит, но я чувствую, что должен быть лучший способ.