Что такое кэширование в играх
Что такое кэш игр и приложений на Android?
Кстати, вам также необходимо знать о том, что кэш не всегда корректно позволяет запускаться и работать приложению на различных устройствах. К примеру, на одном из устройств игра работает отлично без каких-либо глюков, в то время как в другом устройстве иной фирмы оно может даже не запуститься.
Теперь поговорим о том, как устанавливается кэш.
Первый способ: автоматически
О нем мы уже успели упомянуть чуть выше. Суть проста: пользователь скачивает игру с Google Play. Игра автоматически устанавливается на устройство. После запуска игры пользователь сразу может начать играть в нее, поскольку установка кэша в том числе происходит в автоматическом режиме. Если будет необходимо скачать кэш, система сделает это полностью автоматически, разве что спросит пользователя, согласен ли он скачать нужные данные. Если пользователь дает положительный ответ, то система скачивает кэш и устанавливает его в нужную директорию.
Это наиболее удобный для пользователя вариант, так как единственное, что ему нужно сделать, это пару раз тапнуть по экрану. Ну, также стоит позаботиться о дополнительном месте в памяти устройства. Не забывайте, что размер папки кэша может быть так велик, что лучше использовать Wi-Fi-соединение.
Второй способ: вручную
Друзья! Если наш сайт помог вам или просто понравился, вы можете помочь нам развиваться и двигаться дальше. Для этого можно:
Как, почему и когда надо чистить кэш на Android
Кэш приложений может быть спорной темой на Android. Многие люди постоянно чистят кэш приложений, веря в то, что это позволит смартфону работать быстрей. Другие говорят, что это, в первую очередь, сводит на нет всю цель кэширования и просто увеличивает время запуска приложений и выполняемых действий. Истина, как обычно, где-то посередине. Некоторые приложения могут не использовать кэширование эффективно, из-за чего используются излишне большие объемы памяти. Иногда кэш может вызывать проблемы после выхода обновления и надо его сбрасывать. А еще некоторые приложения могут начинать работать медленнее, когда их кэш становится очень большим. Сказать однозначно, надо ли его удалять, нельзя. Но сейчас рассмотрим эту тему подробнее, чтобы вы понимали, когда это делать и как?
Надо ли чистить кэш телефона?
Что такое кэш на Андройд
Кэширование в компьютерном мире это то, что позволяет приложениям, таким, как браузеры, игры и потоковые сервисы хранить временные файлы, которые считаются актуальными для уменьшения времени загрузки и увеличения скорости работы. YouTube, Карты, музыкальные сервисы и множество других приложений сохраняют информацию в виде данных кэша. Это могут быть миниатюры видео, история поиска или временно сохраненные фрагменты видео. Кэширование может сэкономить много времени, так как качество и скорость Интернета не везде одинаковы. Но по иронии судьбы, когда приложения выгружают много данных на ваш телефон, это в конечном итоге замедляет его работу, особенно, когда остается мало места на встроенной памяти.
Наш Иван Кузнецов не так давно писал о том, что никогда не чистит кэш и считает это не нужным. Многие из вас, возможно, с ним не согласны. Да я и сам переодически провожу эту процедуру. Тем не менее, для полноты картины можете ознакомиться с его мнением.
Очистка кэша и данных на Android
Хотя мы часто упоминаем очистку кэша и данных в одном ключе, на Android это два совершенно разных действия. Например, музыкальные сервисы часто сохраняют в кэш информацию, относящуюся к исполнителям, которых вы слушали, но которые не входят в вашу библиотеку. Когда кэш приложения очищается, все упомянутые данные стираются.
Очистка лишней не будет? Не факт.
Более существенные данные включают в себя пользовательские настройки, базы данных и данные для входа в систему. Когда вы очистите кэш, это все удалится и будет не очень приятно. Если говорить грубо, можно сказать, что очистка кэша придает приложению тот вид, который был сразу после его установки, но у вас останутся данные, которые вы сами осознанно сохранили (загруженные песни, видео в оффлайн, карты и так далее). Если вы удалите и эти данные, то приложение будет вообще нулевым. Если чистите и кэш, и данные, проще тогда и приложение переустановить, чтобы вообще все красиво было.
Как очистить память смартфона. Пять простых шагов.
Когда надо чистить кэш
В чем-то я согласен с Иваном и с его мнением, которое я приводил в начале статьи. Нет смысла чистить кэш часто. После того, как вы его очистили, приложение все равно его создаст заново. Только в это время оно будет работать еще медленнее.
Тут важно найти баланс и понять, действительно ли ваш смартфон тормозит из-за кэша или, например, он просто старый и уже не тянет. Если не вникать в это, то можно посоветовать чистить кэш один раз в 3-6 месяцев, но быть готовым, что первые несколько дней скорость работы будет чуть ниже. В итоге, вы как бы освежите приложение, удалив лишний мусор и заново собрав только то, что нужно.
Google Play рассылает пустые обновления приложений. Что делать?
Как очистить кэш и данные на Android
Точную инструкцию для каждого смартфона дать не получится, так как все зависит от производителя и версии ОС, но общие правила будут следующими.
Шаг 1: Запустите «Настройки» и перейдите в раздел «Хранилище» (или найдите его поиском). Так вы сможете узнать, сколько памяти вашего смартфона занято и чем.
Шаг 2. В разделе «Хранилище» найдите «Приложения» (или «Другие приложения») и выберите его. В нем будут перечислены все приложения, а также то, сколько места каждое из них занимает. В некоторых версиях ОС можно найти сортировку приложений по алфавиту или размеру.
Шаг 3: Зайдите внутрь приложения и удалите кэш или данные. Только надо понимать, что это действие необратимо.
Три простых шага для очистки кэша.
В отношении специальных приложений для очистки я очень категоричен и не рекомендую ими пользоваться. Несмотря на их обещания ускорить систему чуть ли не в разы, в лучшем случае они просто сделают то же, что я только что описал. Так почему бы не сделать это самому без установки сомнительных приложений, которые еще и будут собирать ваши данные? Единственное приложение-оптимизатор, которому я доверяю, это Google Файлы, но работает оно именно с хранилищем и чистит в первую очередь мусор. Хотя, на него тоже нельзя слепо полагаться, но оно сделано Google, а к ней доверия куда больше, чем к каким-то левым разработчикам.
Если вы все еще хотите установить подобное приложение, просто помните о том, что они работают в фоновом режиме и используют системные ресурсы. Даже если они что-то ускорят, то сразу замедлят обратно.
Надо ли чистить кэш Android-приложений
Возможность очистки данных — это действительно полезная функция для решения многих проблем, уникальная для Android. Но как и любой полезной вещью злоупотреблять ей не стоит. Не надо чистить кэш и память каждый день. Делайте это периодически и только по мере надобности. Начал телефон работать медленно — пробегитесь по хранилищу. Если увидели, что какое-то из приложений занимает слишком много места, хотя не должно, очистите кэш.
Еще больше полезных советов и рассуждения в нашем Telegram-канале.
Еще раз: очистка кэша не испортит ваш смартфон, но приложение потеряет часть сохраненных данных и оптимизированных под вас настроек. Некоторое время придется накапливать их заново, зато так можно убрать действительно лишнее. Раньше можно было одной кнопкой очистить кэш всех приложений, теперь только по одному, но, наверное, это к лучшему.
Чего точно не стоит делать с кэшем, так это чистить его каждый день или каждую неделю. Так вы точно не сделаете лучше никому.
Кэширование шейдеров NVIDIA. ВКЛ или ВЫКЛ
В панели управления NVIDIA присутствует возможность включения или выключения кэширования шейдеров. Теоретически он снижает загрузку центрального процессора, сохраняя скомпилированные шейдеры в кэш на диске. На практике не все игры его поддерживают.
Эта статья расскажет о кэшировании шейдеров NVIDIA. Нужно определиться, что лучше, включить или отключить функцию. На видеокарте Gigabyte GTX 1080 и последних драйверах параметр по умолчанию включён. В большинстве игр настройка не влияет на частоту кадров.
Что такое кэширование шейдеров NVIDIA
Параметр в некоторых приложениях снижает нагрузку ЦП путём сохранения скомпилированный шейдеров на диске. Используется только при запуске игры на первом построении шейдеров. Ранее собранный шейдер будет уже просто извлечён из дискового кэша.
Типичные ситуации применения:
Включено | увеличивает плавность изображения и снижает время загрузки; |
Отключено | используется для экономии места на локальном диске. |
Кэширование может уменьшить или вовсе убрать тормоза в играх при необходимости следующего построения шейдеров. Не стоит паниковать насчёт здоровья SSD накопителей. Кэш записываться только несколько раз, в последующем использовании он только считывается.
Как отключить кэширование шейдеров
NVIDIA
В процессе использования видеокарты NVIDIA заметил, что п о умолчанию кэширование шейдеров включено. Возможно, всё зависит от Ваших комплектующих. На более слабых графических картах параметр вообще может отсутствовать или быть недоступным.
В классической Панели управления NVIDIA откройте раздел Параметры 3D > Управление параметрами 3D. Измените значение параметра Кэширование шейдеров на Выключено. В целом это может освободить дополнительно несколько гигабайт дискового пространства.
Можно отключить кэширование в отдельном приложении выбрав Программные настройки или всем сразу, изменив Глобальные параметры. Параметры замещения будут использоваться при каждом запуске программы, вместо использования глобальных.
Steam
Предварительное кэширование позволяет Steam загружать заранее скомпилированные графические шейдеры для Вашего компьютера. Благодаря этому игры, использующие Vulkan или OpenGL, будут загружаться быстрее, а стабильность частоты кадров возрастёт.
Перейдите в раздел Steam > Настройки > Кэш шейдеров. Чтобы отключить кэширование, снимите отметку Включить кэш шейдеров. При включении нагрузка на сеть и дисковое пространство может незначительно вырасти. Без поддержки драйверов функция не работает.
Использование кэширования шейдеров не увеличивает поточное количество кадров в секунду. Но всё же стабильность и среднее количество кадров возрастает. Постоянная загрузка шейдеров приводит к нежелательным просадкам производительности на слабых компьютерах.
Особенности кэширования компонентов в Unity3D
Большинство unity-разработчиков знают, что не стоит злоупотреблять дорогими для производительности операциями, такими как, например, получение компонентов. Для этого стоит использовать кэширование. Но и для такой простой оптимизации можно найти несколько различных подходов.
В этой статье будут рассмотрены разные варианты кэширования, их неочевидные особенности и производительность.
Стоит отметить, что говорить мы будем в основном о “внутреннем” кэшировании, то есть получении тех компонентов, которые есть на текущем объекте для его внутренних нужд. Для начала откажемся от прямого назначения зависимостей в инспекторе — это неудобно в использовании, засоряет настройки скрипта и может привести к битым ссылкам при вылете редактора. Поэтому будем использовать GetComponent().
В Unity3D каждый объект на игровой сцене — это контейнер (GameObject) для различных компонентов (Component), которые могут быть как встроенными в движок (Transform, AudioSource и т.д.), так и пользовательскими скриптами (MonoBehaviour).
Компонент может быть назначен напрямую в редакторе, а для получения компонента из контейнера в скрипте используется метод GetComponent().
Если компонент требуется использовать не единожды, традиционный подход — объявить в скрипте, где он будет использоваться, переменную для него, взять нужный компонент один раз и в дальнейшем использовать полученное значение. Пример:
Стоит отметить, что самый очевидный метод кэширования (прямое получение компонентов) изначально является наиболее производительным в общем случае и другие варианты лишь его используют и предоставляют более простой доступ к компонентам, избавляя от необходимости писать однотипный код каждый раз либо получать компоненты по запросу.
Также отмечу, что есть и намного более дорогие операции (такие как создание и удаление объектов на сцене) и кэшировать компоненты, не уделяя внимания им, будет пустой тратой времени. Например, в вашей игре есть пулемет, который стреляет пулями, каждая из которых является отдельным объектом (что само по себе неправильно, но это же сферический пример). Вы создаете объект, кэшируете в нем Collider, ParticleSystem и еще кучу всего, но пуля улетает в небо и убивается через 3 секунды, а эти компоненты не используются вообще.
Для того, чтобы этого избежать, используйте пул объектов, об этом есть статьи на Хабре (1, 2) и существуют готовые решения. В таком случае вы не будете постоянно создавать и удалять объекты и раз за разом кэшировать их, они будут переиспользоваться, а кэширование произойдет лишь единожды.
Производительность всех рассмотренных вариантов кэширования будет отображена в сводной диаграмме.
Основы
У метода GetComponent есть два варианта использования: шаблонный GetComponent() и обычный GetComponent(type), требующий дополнительного приведения (comp as T). В сводной диаграмме по производительности будут рассмотрены оба этих варианта, но стоит учесть, что шаблонный метод проще в применении. Также существует вариант получения списка компонентов GetComponents с аналогичными вариантами, они также будут проверены. В диаграммах время выполнения GetComponent на каждой платформе принято за 100% для нивелирования особенностей оборудования, а также есть интерактивные версии для большего удобства.
Использование свойств
Для кэширования можно использовать свойства. Плюс этого метода — кэширование произойдет только тогда, когда мы обратимся к свойству, и его не будет тогда, когда это свойство используется. Минус заключается в том, что в данном случае мы пишем больше однотипного кода.
Самый простой вариант:
Этот вариант благодаря проверке на отсутствие компонента обладает проблемами с производительностью.
Есть два варианта решения этой проблемы:
Использовать дополнительный флаг, указывающий, производилось ли кэширование:
Явно приводить компонент к object:
Но нужно учитывать, что этот вариант безопасен только в том случае, когда компоненты объекта не удаляются (что обычно происходит нечасто).
When you get a c# object of type “GameObject”, it contains almost nothing. this is because Unity is a C/C++ engine. All the actual information about this GameObject (its name, the list of components it has, its HideFlags, etc) lives in the c++ side. The only thing that the c# object has is a pointer to the native object. We call these c# objects “wrapper objects”. The lifetime of these c++ objects like GameObject and everything else that derives from UnityEngine.Object is explicitly managed. These objects get destroyed when you load a new scene. Or when you call Object.Destroy(myObject); on them. Lifetime of c# objects gets managed the c# way, with a garbage collector. This means that it’s possible to have a c# wrapper object that still exists, that wraps a c++ object that has already been destroyed. If you compare this object to null, our custom == operator will return “true” in this case, even though the actual c# variable is in reality not really null.
Проблема здесь в том, что приведение к object хоть и позволяет обойти дорогой вызов native-кода, но при этом лишает нас кастомного оператора проверки существования объекта. Его C# обертка все еще может существовать, когда на самом деле объект уже уничтожен.
Наследование
Для упрощения задачи можно наследовать свои классы от компонента, кэширующего самые используемые свойства, но этот вариант неуниверсален (требует создания и модификации всех необходимых свойств) и не позволяет наследоваться от других компонентов, если это потребуется (в C# нет множественного наследования).
Первая проблема может быть решена использованием шаблонов:
Вторую проблему можно обойти, создав отдельный компонент для кэширования и используя в своих скриптах ссылку на него.
Статическое кэширование
Есть вариант использования такой особенности C#, как расширение. Она позволяет добавлять свои методы в уже существующие классы без их модификации и наследования. Это делается следующим образом:
После этого в любом скрипте можно получить этот компонент:
Но этот вариант снова требует задания всех необходимых компонентов заранее. Можно решить это с помощью шаблонов:
Минус этих вариантов — нужно следить за мертвыми ссылками. Если не очищать кэш (например, при загрузке сцены), то его объем будет только расти и засорять память ссылками на уже уничтоженные объекты.
Сравнение производительности
Интерактивный вариант
Как мы видим, серебряной пули не нашлось и самый оптимальный вариант кэширования — получать компоненты напрямую при инициализации. Обходные пути не оптимальны, за исключением свойств, которые требуют написания дополнительного кода.
Использование атрибутов
Атрибуты позволяют добавлять мета-информацию для элементов кода, таких как, например, члены класса. Сами по себе атрибуты не выполняются, их необходимо использовать при помощи рефлексии, которая является достаточно дорогой операцией.
Мы можем объявить свой собственный атрибут для кэширования:
И использовать его для полей своих классов:
Но пока что это нам ничего не даст, данная информация никак не используется.
Наследование
Мы можем создать свой класс, который будет получать члены класса с данным атрибутом и явно получать их при инициализации:
Если мы создадим наследника этого компонента, то сможем помечать его члены атрибутом [Cached], тем самым не заботясь о их явном кэшировании.
Но проблема с производительностью и необходимость наследования нивелирует удобство данного метода.
Статический кэш типов
Список членов класса не меняется при выполнении кода, поэтому мы можем получить его один раз, сохранить его для данного типа и использовать в дальнейшем, почти не прибегая к дорогой рефлексии. Для этого нам потребуется статический класс, хранящий результаты анализа типов.
И теперь для кэширования в каком-либо скрипте мы используем обращение к нему:
После этого все члены класса, помеченные [Cached] будут получены с помощью GetComponent.
Эффективность кэширования с помощью аттрибутов
Сравним производительность для вариантов с 1 или 5 кэшируемыми компонентами:
Интерактивный вариант
Интерактивный вариант
Шаг назад или использование редактора
Уже когда я заканчивал эту статью, мне подсказали одно интересное решение для кэширования. Так ли необходимо в нашем случае сохранять компоненты именно в запущенном состоянии приложения? Вовсе нет, мы это делаем только единожды для каждого экземпляра, соответственно функционально это ничем не отличается от назначения их в редакторе до запуска приложения. А все, что можно сделать в редакторе, можно автоматизировать.
Так появилась идея кэшировать зависимости скриптов с помощью отдельной опции в меню, которая подготавливает экземпляры на сцене к дальнейшему использованию.
Вполне возможно, что текущие ограничения в дальнейшем можно будет устранить.
Особенности получения отсутствующих компонентов
Интересной особенностью оказалось то, что попытка получить отсутствующий компонент занимает больше времени, чем получение существующего. При этом в редакторе наблюдается заметная аномалия, которая и навела на мысль проверить это поведение. Так что никогда не полагайтесь на результаты профилирования в редакторе.
Интерактивный вариант
Заключение
В данной статье вы увидели оценку различных методов кэширования компонентов, а также узнали об одном из полезных применений атрибутов. Методы, основанные на рефлексии, в принципе, могут применяться при создании проектов на Unity3D, если учитывать его особенности. Один из них позволяет писать меньше однотипного кода, но чуть менее производителен, чем решение “в лоб”. Второй на данный момент требует чуть больше внимания, но не влияет на итоговую производительность.
Проект с исходниками скриптов для теста и proof-of-concept кэша с помощью атрибутов доступны на GitHub (отдельный пакет с итоговой версией здесь). Возможно, у вас найдутся предложения по улучшению.
Спасибо за внимание, надеюсь на полезные комментарии. Наверняка этот вопрос рассматривался многими и вам есть что сказать по этому поводу.
Что такое кэширование в играх
Новые темы необходимо создавать только в корневом разделе! В дальнейшем они будут обработаны модераторами.
Если вы выложили новую версию игры или её кэш, пожалуйста, сообщите об этом модератору, нажав на вашем сообщении кнопку «Жалоба».
С запросами на обновление уже существующих на форуме игр обращайтесь в тему Обновите игру!
Установка игр с кэшем
Жанр: Разное
Последнее обновление темы: 9.11.2013
Как устанавливать приложения «.apk»? (FAQ)
FAQ по Android OS
1.Вопрос: Как устанавливать игры («apk»)?
Ответ: Как устанавливать приложения вы найдете здесь FAQ по Android OS.
2.Вопрос: Что такое кэш?
Ответ: Кэш – это набор файлов (текстуры, музыка, видео, служебные файлы) и папок, необходимых для запуска игры. Так же можно сказать, что это основная составляющая игры. Обычно с кэшем идут игры, которые имеют большой размер.
3.Вопрос: Для чего же нужен кэш?
Ответ: Кэш нужен для запуска и полноценной работы игры. Предположим, что игра, к примеру, размером в 1 гигабайт была бы в виде одного apk файла, то вашему смартфону просто бы не хватило бы внутренней памяти для ее установки. Так же ввиду разнообразия железа: видеускорителей, центрального процессора, разрешения экрана и т.д., существуют разные сборки кэша и поэтому в большинстве случаев кэш индивидуален под определенный телефон. Выбирайте кэш под ваш телефон/платформу.
4.Вопрос: Почему я не могу установить игру («apk»)?
Ответ: Устанавливать программы вы можете разными способами, включая установку напрямую из «apk» файла. Для этого Вам необходимо разрешить установку приложений из неизвестных источников: заходим в меню телефона, настройки/Settings>Приложения/Application Settings и ставим галочку напротив пункта Неизвестные источники/Unknown Sources. Так же убедитесь что вы устанавливаете игру(«apk») подходящую для вашего телефона. Выбирайте игру («.apk») под ваш телефон/платформу.
6.Вопрос: Почему изображение игры меньше или выходит за экран, белые текстуры и прочие артефакты?
Ответ: Cкорее всего вы установили кэш который предназначен для другого устройства.Попробуйте другой кэш или лучше всего скачайте кэш конкретно под вашу модель через Wi-Fi.
7.Вопрос: При удалении игры,кэш удаляется автоматически?
Ответ: Нет, не всегда. Иногда кэш удаляется при удалении игры, иногда нет и он остаётся на месте. Cмотрите в теме путь по которому лежит кэш игры и удаляйте его в ручную через сторонний файловый менеджер.
9. Вопрос: Как сменить учетную запись в Google play на телефоне?
Ответ: Найдете тут Как удалить единственный аккаунт google не сбрасывая все настройки
11. Вопрос: Я скачал/а кэш, но он заархивирован. Его надо разархивировать для установки игры?
Ответ: Да, нужно разархивировать и в папку игры копировать распакованный кэш.
13. Что такое бэкап для игр и как его делать?
Ответ: ® Titanium Backup