Каковы эти необъяснимые исключения киоска сценария? - PullRequest
3 голосов
/ 12 июля 2011

Наша флеш-игра выполняется почти 4000 пользователей в день, и около 2% пользователей получают срыв сценария (исключение Flash при ошибках # 1502 и # 1503). Мы знаем, что эти ошибки происходят, потому что мы фиксируем и регистрируем эти исключения, используя функцию uncaughtErrorEvents в Flash Player 10.

Мы также ведем журнал истории вызовов функций, поэтому мы видим, что исключение всегда происходит в другом месте в коде ActionScript3, но, конечно, обычно в тех частях кода, которые выполняются чаще всего.

Я на 99% уверен, что наш код не застрял в бесконечном цикле, и я знаю, для чего изначально была сделана эта ошибка.

Я подозреваю, что происходит, когда пользователь работает на очень медленной машине, а флэш-память выполняет сборку мусора или что-то, что вызывает остановку. Затем Flash обнаруживает длительное выполнение кода и прерывает его, поскольку он превышает ограничение по времени сценария, установленное в настройках публикации Flash. В настоящее время у нас установлено значение 20 секунд, что должно быть более чем достаточно для запуска любого нашего кода на приличной машине.

Кто-нибудь еще сталкивался с подобной проблемой? Какие решения были использованы, если не считать ограничения по времени сценария на какое-то огромное число, которое нам, возможно, просто нужно сделать?

1 Ответ

2 голосов
/ 12 июля 2011

Звучит как зависание файла подкачки ИЛИ Медленные компьютеры, которые случайным образом рушатся при ударах.

Ваша флешка содержится в браузере.Который хранится в памяти.Теперь, когда пользователю нужно больше памяти, чем у него, скажем, данные Windows для памяти хранятся на части жесткого диска в виде «виртуальной памяти» внутри «файла подкачки», что позволяет им запускать столько приложений, сколько им нужно.один раз.

Это все хорошо, но это означает, что если поток, в котором работает ваш Flash, по какой-либо причине был перемещен частично или полностью в виртуальную память, то каждое обновление должно опрашивать жесткий диск.диск для доступа к памяти.

Жесткие диски медленны, очень медленны по сравнению с реальной оперативной памятью (оперативной памятью), и поскольку они настолько медленны, приоритет идет первым, всегда .Так как он не может обновиться, пока не сможет прочитать с жесткого диска, он зависает.Поскольку Flash знает, что если обновление не вызывается в течение определенного периода времени (обычно, когда скрипт застревает в цикле), оно выдает ошибку, которую вы получаете.

Самая большая ошибка, которую я вижу, вызываетэто когда происходит утечка памяти.Обычно в форме «думал, что это было удалено, и объекты для сбора мусора».Попробуйте профилировать память в отладочном прогоне и поиграйте несколько часов, проверьте, увеличивается ли загрузка памяти, поскольку вы делаете одно и то же снова и снова.Следите за размерами массивов, ищите такие вещи, как фрагменты фильмов, которые удаляются с экрана, но никогда не удаляются (и, следовательно, хранятся в памяти).Плохо написанные меню часто страдают от этой дилеммы.

Всегда также существует вероятность того, что зависший компьютер просто не справится с обработкой по кадрам, в то время как что-то вроде антивируса запускает сканирование системы (переключение памяти), которое будет более реалистичным дляваши спорадические данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...