#android #performance
#Android #Производительность
Вопрос:
Системные вызовы очень дороги. System.out.println()
может поставить приложение на колени, если выполняется внутри цикла. Влияет ли это аналогичным образом на Android без консоли?
Комментарии:
1. Большая часть причин
System.out.println()
дороговизны заключается в фактическом отображении выходных данных в консоли , что происходит медленно. Если вы перенаправите вывод, внезапно он станет намного быстрее. Это не потому, что это системный вызов, системные вызовы выполняются постоянно, чтобы сделать практически все, что взаимодействует с чем-либо вне вашего приложения.2. Если вы решите протестировать это, пожалуйста, сообщите об этом.
3. В моем курсе по операционной системе мы миллион раз измеряли время выполнения программы на c , которая ничего не записывала (dev / null), и сравнивали его с программой, которая повторяла тот же цикл, но не выполняла пустые системные вызовы, и разница в производительности была существенной.
4. Системные вызовы стоят дорого? Интересно, как тогда вообще функционируют наши операционные системы.
5. @farm ostrich: Это несправедливое сравнение. Попробуйте вместо этого вызвать пустую функцию. Даже это несправедливо. Вы вызываете функцию, которая что-то делает, конечно, на это будет потрачено время. Запись в
/dev/null
по-прежнему выполняет все, что делает запись в любое другое место, за исключением фактического попадания на жесткий диск. Мне также любопытно, насколько существенным является «существенный».
Ответ №1:
Провел для вас быстрый тест, используя цикл итерации 10000000.
Пустой ~ 200 мс System.out.println() ~ 5600 мс System.out.println («abcdefghijklmnop») ~ 90000 мс
Вам решать, применять это к вашей ситуации, приемлемо это или нет.
Кстати, это ничего не делает, оно печатается в журнале устройства
Комментарии:
1. Интересно… Более старые версии ничего не печатали, вам приходилось переключать его на Log.d или что-то в этом роде… хорошая находка!