2016-09-28 1 views
0

Я создал небольшую анимацию для игры, которая использует набор изображений в качестве кадров, и текущее изображение, чтобы визуализировать изменения за определенное количество времени, чтобы создать иллюзию анимации. Я сделал это двумя разными способами, и мне интересно, какой из них более эффективен в использовании.Неужели компьютер загружен и выгружает изображение каждый раз, когда требуется новое изображение или чтобы все изображения загружались одновременно? (SDL)

Способ 1: Одно изображение загружается и отображается. Когда нужно визуализировать другое изображение, вызывается функция, которая выгружает текущее изображение и загружает и отображает новый.

Способ 2: Все изображения, необходимые для анимации, загружаются один раз и затем визуализируются по мере необходимости.

Проще говоря: Метод 1 выгружает текущее изображение и загружает на новый каждый раз, когда требуется другое изображение, и метод 2 сохраняет все изображения, необходимые загружены сразу.

Так что в основном вопрос заключается в том, что лучше постоянно загружать и выгружать изображения, чтобы они были как можно меньше загружены, или чтобы иметь много загрузок в любое время и не выгружать/загружать что-либо во время программы? Имеет ли компьютер более тяжелое время загрузки и выгрузки изображений или одновременного хранения нескольких изображений?

Я бежал, смотря на диспетчер задач, запуская каждый метод. Использование ЦП метода 1 (загрузка и разгрузка) колебалось между 29% и 30%, в то время как метод 2 колебался между 28% и 29%.

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

Как игра становится больше, не может быть сотни изображений, загруженных на один раз (способ 2) или изображение загружается и выгружается почти каждый кадр (метод 1). Какой метод менее интенсивный? Спасибо за ваше время.

+0

Зависит. При загрузке всех изображений, которые требуется сразу, вы держите их в ОЗУ. Если вы не заботитесь об использовании памяти, вы можете технически загрузить их все в память без проблем (метод 2). Если вы хотите получить лучшее из обоих миров, вы можете иметь приоритетную загрузку (т. Е. Загружать X-много изображений и заменять наименее используемые, когда вам нужен новый) – mascoj

ответ

3

Во-первых, вы не определяете «интенсивный». Наличие игрового автомата на 100% является хорошим - или, по крайней мере, не обязательно плохим. Это зависит от того, что еще происходит в вашей системе.

Во-вторых, анализ производительности выполняется путем измерения, а не мышлением. Вы измерили и нашли ответ. Верьте в ответ.

В общем, быстрее хранить вещи в памяти, чтобы снова и снова загружать диск (как показывает ваше измерение). Однако в конечном итоге вы будете использовать много памяти (здесь нет бесплатных обедов). Вы не говорите, сколько у вас памяти или насколько велики изображения. Предполагая, что каждое изображение равно 10 МБ, 100 из них принимают 1 ГБ. На современное рабочем столе то не много, на встроенную систему, работающая на arduiono его бедствия

Почему бы не попробовать с 100 изображений и посмотреть, что происходит

0

Измерения только подтверждает, что делает меньше результатов работы в более быстром выполнении, и делать что-то один раз быстрее (в долгосрочной перспективе), чем повторять одно и то же много раз (если вы перезапустите свою анимацию из первого кадра, вам нужно будет снова загрузить те же изображения). Больше проблемы здесь - латентность - что, если ваш образ значительно большой, и для его загрузки требуется заметное время, вы просто прекратите рендеринг, пока он не загрузится?Что делать, если жесткий диск находится под большой нагрузкой (особенно жесткий диск, SSD не уязвимы для случайного доступа), и внезапно изображение занимает в 100 раз больше времени для загрузки? (да все же может случиться с процессором, но не так, вероятно, или крайне).

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

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

Смежные вопросы