Сколько времени — это слишком много?

#windows-phone-7 #xna

#windows-phone-7 #xna

Вопрос:

Учитывая, что стандартное количество тактов для цикла в приложении WP7 составляет 333 333 такта (или так оно и есть, если вы задаете его как таковой), сколько из этого временного интервала кому-то приходится работать?

Другими словами, сколько тактов потребляют стандартные процессы (рисование экрана, очистка буферов и т.д.)?

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

Ответ №1:

Обычный способ выполнения задач, требующих больших вычислительных затрат, заключается в выполнении их в фоновом потоке — это означает, что потоки пользовательского интерфейса не блокируются во время выполнения вычислений — обычно потоки пользовательского интерфейса планируются раньше фоновых потоков, так что рисование экрана продолжается плавно, даже если процессор занят на 100%. Такой подход позволяет вам ставить в очередь столько работы, сколько вы хотите.

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

Если ваш вопрос «какова приличная частота кадров?» Тогда это немного зависит от типа приложения / игры, но в целом (в моем возрасте …) Я думаю, что все, что 30 Гц и выше, в порядке — значит, до 33 мс для каждого кадра — и важно, чтобы частота кадров была плавной, то есть каждая длина кадра занимает примерно одинаковое время.

Я надеюсь, что это приблизительно отвечает на ваш вопрос … не был полностью уверен, что понял его!

Комментарии:

1. Процесс, который я выполняю, — это разбор пикселей для определения столкновений и вектора отказов (нормальный), поэтому, к сожалению, это должно быть в основном потоке. Я использую ограничивающие рамки для ограничения времени выполнения проверок, и по-настоящему интенсивный процесс происходит только тогда, когда на самом деле происходит столкновение. Просто интересно, приведут ли 14 мс к менее плавному игровому процессу в те моменты, когда это произойдет.

2. Я думаю, лучший ответ для вас — «пососите это и посмотрите». Честно говоря, 14 мс звучит выполнимо — это запускает работу с базовой частотой 60 Гц… Как только вы запустите какой-нибудь код, вам нужно будет протестировать его на реальном телефоне — эмулятор вам не подойдет. В качестве альтернативы вы могли бы легко взять стандартный образец приложения XNA и добавить цикл занятости на 14 мс в игровой цикл, чтобы посмотреть, каков эффект.

3. Да, я продвигаюсь вперед. Я действительно тестировал приложение на телефоне до этого момента, просто на данный момент у меня его нет. Я пометил ваш ответ как ответ, потому что ценю, что вы нашли время ответить.

4. Я предположил, что у вас должен был быть доступ к телефону — иначе измерение в 14 мс было бы «сложным»! Удачи!