WedX - журнал о программировании и компьютерных науках

Есть ли разница в производительности для вызова .length в массиве по сравнению с сохранением переменной размера?

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

 for(int i = 0; i<array.length; i++){
       //do stuff with the array
 }

Мне было интересно, было бы быстрее, если бы я сохранил переменную в классе, чтобы указать длину этого массива, и вместо этого использовал ее. Или если это вообще имеет значение.

10.12.2011

Ответы:


1

Доступ к атрибуту длины в массиве выполняется максимально быстро.

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

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

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

10.12.2011
  • +использование точки доступа при зацикливании кэширует размер структуры, поэтому на самом деле это не влияет на производительность, если вы используете .length или .size() 10.12.2011
  • @baba, он не кэширует его, это доказывает, что i не может превышать длину, и вообще не проверяет его, разворачивая цикл и т. д. 11.12.2011

  • 2

    это действительно не имеет значения, когда вы создаете массив с [#], он сохраняет это число и просто возвращает его.

    Если вы используете []{object1, object2, object3}, он рассчитает размер, в любом случае значение вычисляется только один раз и сохраняется.

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

    array.length быстрее, хотя и на доли миллисекунды, но в циклах и т. д. вы можете сэкономить массу времени при циклическом просмотре, скажем, 1 000 000 элементов (может быть 0,1 секунды).

    10.12.2011

    3

    Это вряд ли будет иметь значение.

    Более широкая проблема заключается в том, что вы хотите, чтобы ваша симуляция выполнялась как можно быстрее. Этот проект sourceforge показывает, как вы можете использовать работающую программу, чтобы сказать вам, что оптимизировать, а не задаваться вопросом о таких мелочах, как .length. Большинство кодов, написанных впервые (кроме небольших игрушечных программ), обладают огромным потенциалом ускорения, о которых трудно даже догадаться.

    Самые большие возможности для ускорения обычно рассеяны, например, вы выбираете структуру данных. Они не привязаны к конкретным процедурам, и измерительные инструменты не указывают на них. Метод, продемонстрированный в этом проекте, — случайная пауза — идентифицирует их. Изменения, которые вам необходимо внести, могут быть непростыми, но они приведут к ускорению.

    10.12.2011
    Новые материалы

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

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]