3

Написал код для парсинга xml(в xml 500000 строчек), и плюс Debug.Log что-бы вывести каждую строчку, почему когда я запуская на il2cpp оно выполняется в несколько раз дольше в сравнении перед mono, но когда я убираю вывод строк через Debug.Log то il2cpp работает быстрее mono.

1) Объясните причину такого поведения

2) и стоит ли писать такую конструкцию?

#if UNITY_EDITOR
    Debug.Log("Log");

3) Пишет ли он лог файлы какие-то, или нет?

Собирал проект под Windows

Aimon Z.
  • 1,045

1 Answers1

3

По пунктам:

  1. Когда вы используете Debug.Log юнити собирает информацию, включающую stacktrace. При использовании Mono - у вас сам проект так и остается на C# (читайте IL), то есть лог собирать просто. Если il2cpp - C# код перегоняется в C++, а далее компилируется. Соотвественно вам из сгенерированного С++ кода надо понять какой C# код этому соответствовал. А если смотреть производительность без логов - С++ код (особенно, если оптимизированный) будет всегда производительней C#. Как минимум потому что C# требуется свой рантайм для исполнения, а С++ таким не болеет.
  2. В большинстве случаев, лучшая практика - сделать свою обертку для Debug.Log, с возможностью быстрого влючения/отключения. Если использовать #if UNITY_EDITOR - вам придется каждый вызов лога по коду обернуть в такую конструкцию, если кода много в проекте, то это заметно долго + бесполезная рутинная деятельность. Выключить логи в проекте можно проще. На юнити до 2019 используйте Debug.unityLogger.logEnabled = false;. Для более ранних версий используйте Debug.logger.logEnabled = false;. Соответствующую строку кода оберните в #if !UNITY_EDITOR и напишите все это в отдельном скрипте. Такой вызов выключит все логи в одном месте.
  3. Debug.Log всегда пишет в файл. Эта операция всегда дорогая и надо минимизировать вызовы лога в продакшен сборках. Каждый вызов лога будет осуществлять открытие файла, запись в него и закрытие, что делает операцию еще более дорогостоящей. Если вам интересно в какие файлы лог пишет информацию, почитайте об этом в официальной документации.
vmchar
  • 4,442