1.5Kпросмотров
28 мая 2024 г.
Score: 1.6K
📈 Увеличение производительности с помощью IL2CPP.
SPARSEHASH Вышла интересная статья от техлида Алексея Мерзликина. В ней он рассматривает Sparse_hash_map и Dense_hash_map — форматы хранения хешмапы в плюсах. И оба они гугловские.
Думаю, основной аудитории канала, обяъяснять, что такое хеш-таблица не нужно. Но напишу о двух из рассматриваемых способах хранения: 🥱 Sparse_hash_map — мало жрет памяти, но работает медленней.
🔥 Dense_hash_map — жрет памяти больше, но и работает быстрее. Метаданные в IL2CPP, сгенерированные для каждого типа и используемые для таких задач, как вызов виртуального метода, практически не проанализированы в интернете. Следовательно, это ценная информация. — А теперь к сути статьи:
Дело в том, что IL2CPP использует Il2CppHashMap либо в том, либо в другом формате, в зависимости от:
#define IL2CPP_USE_SPARSEHASH (IL2CPP_TARGET_ANDROID || IL2CPP_TARGET_IOS)
"Это означает, что sparse hash используется для мобильных платформ, а dense — для других, таких как ПК, консоли и т. д."
Для чего это сделано? Вероятней всего для того, чтобы на мобилках экономить память. Но всегда ли это нужно? Я думаю нет. — Хорошо, но что если мы принудительно в плюсовом коде изменим IL2CPP_USE_SPARSEHASH на ПК на 1 и сделаем замеры скоростей. Сравним, насколько медленней работает тот или иной вариант.
Для примера, автор приводит сравнения, а также использует Zenject для своих тестов. В нем используются "reflection and instance creation", поэтому пример нагруженный, хороший. — Он получает разницу в производительности — в 2 раза.
Таким образом, заключает он, что это важный параметр и в случае необходимости, можно его изменять. 👀 Что ж, я со своей стороны отмечу, что тест был не совсем корректный:
Во-первых, не было проверки на мобильном(ых) устройстве(ах).
Во-вторых, не было кейсов, по мимо Zenject. 🙂 Тем не менее, информация была полезна, спасибо автору за неё.
Анализируя другие статьи, можно утверждать, что dense одна из наиболее быстрых реализаций (конечно, за вычетом некоторых её особенностей, касаемых, к примеру, перестроения). Следовательно, большой необходимости использовать другие варианты — нет.
И это хорошо, что именно её можно использовать без особых проблем в коде, проходящем через IL2CPP. Если интересна тема IL2CPP, ставьте 👍 #thematic_post #il2cpp