[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Скорость доступа к элементу массива и к переменной
kirik
Собственно сабж.

Есть-ли разница по скорости в том, откуда мы достаем значение. Тоесть будет-ли работать $variable быстрее чем $arr[0][4][2]['variable'], при одинаковом количестве записанных данных в переменную?



Спустя 52 минуты, 49 секунд (29.09.2008 - 20:21) Vaska написал(а):
Если вопрос просто философский, то засеките время
Код
<?php
// это в самое начало кода
define("START_TIME", microtime(true));

//Это в конец
printf("Время работы скрипта: %.5f с", microtime(true) - START_TIME);
?>

Если говорить о практическом значении, то не заморачивайтесь, разница в скорости минимальна

Спустя 10 часов, 58 минут, 34 секунды (30.09.2008 - 07:20) kirik написал(а):
2 Vaska, спасибо за ответ! Да, разница, даже если она есть, настолько мизерна, что ее не получится замерить. Просто было интересно есть-ли разница, в каком виде хранятся переменные в памяти и насколько разный алгоритм доступа к ним в этих двух случаях.

Спустя 38 минут, 53 секунды (30.09.2008 - 07:59) bvn написал(а):
я, если мне хочется замерить что-нибудь мизерное, организовываю циклы... smile.gif

Спустя 18 минут, 7 секунд (30.09.2008 - 08:17) kirik написал(а):
bvn, хорошо.. Есть предложения как замерить разницу в скорости того, что описано выше? smile.gif

Спустя 2 минуты, 41 секунда (30.09.2008 - 08:20) Vaska написал(а):
Цитата(kirik @ 30.9.2008, 9:17) [snapback]49663[/snapback]
bvn, хорошо.. Есть предложения как замерить разницу в скорости того, что описано выше? smile.gif

Используй код, который я выше привел, между двумя строками кода поставь цикл в миллион итераций и замеряй

Спустя 27 минут, 36 секунд (30.09.2008 - 08:47) sergeiss написал(а):
Исходя из моих познаний в этой области... Разница должна быть. Потому что адрес переменной определяется просто смещением в области переменных, а адрес элемента массива состоит из адреса начального элемента (т.е., это то же смещение в области переменных), и затем еще вычисляется смещение конкретного элемента относительно начального элемента массива.
То есть, в случае с массивом определение адреса элемента занимает больше времени.

Хочу уточнить, что эти рассуждения абсолютно верны в случае, например, языка Си. Но и в ПХП, я думаю, всё обстоит точно также. Ибо никто не будет изобретать заново велосипед.

PS. В случае многомерного массива вычисление адреса элемента будет еще немного дольше.

Спустя 51 минута (30.09.2008 - 09:38) Vaska написал(а):
Цитата(sergeiss @ 30.9.2008, 9:47) [snapback]49666[/snapback]
Исходя из моих познаний в этой области... Разница должна быть. Потому что адрес переменной определяется просто смещением в области переменных, а адрес элемента массива состоит из адреса начального элемента (т.е., это то же смещение в области переменных), и затем еще вычисляется смещение конкретного элемента относительно начального элемента массива.
То есть, в случае с массивом определение адреса элемента занимает больше времени.

Хочу уточнить, что эти рассуждения абсолютно верны в случае, например, языка Си. Но и в ПХП, я думаю, всё обстоит точно также. Ибо никто не будет изобретать заново велосипед.

PS. В случае многомерного массива вычисление адреса элемента будет еще немного дольше.

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

Спустя 19 минут, 36 секунд (30.09.2008 - 09:58) linedmk написал(а):
Дык если нужен массив, то куда от этого денешся? чем его замениш? Изобретать непонятно что? Вот массив ненужно использовать вместо одной переменной. И замарачиваться имхо поэтому вопросу не стоит.

Спустя 7 минут, 6 секунд (30.09.2008 - 10:05) sergeiss написал(а):
Цитата(linedmk @ 30.9.2008, 10:58) [snapback]49680[/snapback]
Дык если нужен массив, то куда от этого денешся? чем его замениш? Изобретать непонятно что? Вот массив ненужно использовать вместо одной переменной. И замарачиваться имхо поэтому вопросу не стоит.

Ну почему же не стОит? (ударение тут ставим, я думаю?) smile.gif Очень даже стОит. Хотя бы для лучшего понимания процессов. И вообще - наличие таких вопросов (в начале темы) говорит о том, что человек очень даже вдумчиво делает программы, а не бездумно "кОдит" smile.gif
Я лично "за" такие вопросы. Чем их больше, тем лучше понимание. Я вот, например, не всё далеко знаю. Но вот один человек озадачиться подобным вопросом, я почитаю... И тоже умнее становлюсь.

Вывод: вопросам на понимание процессов - быть! (Точка. Печать. Вердикт окончательный и обсуждению не подлежит smile.gif)

PS. Vaska - а я и не собирался никакие циклы писать в данном случае smile.gif

Спустя 4 минуты, 8 секунд (30.09.2008 - 10:09) vasa_c написал(а):
Для замерения скорости есть профайлеры.

Цитата
Но и в ПХП, я думаю, всё обстоит точно также. Ибо никто не будет изобретать заново велосипед.

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

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

Код
$elem = &$A[0][1]['two']['three'];
for (...) {
    $elem++;
}

Спустя 4 часа, 17 минут, 2 секунды (30.09.2008 - 14:26) linedmk написал(а):
Цитата(sergeiss @ 30.9.2008, 11:05) [snapback]49683[/snapback]
Цитата(linedmk @ 30.9.2008, 10:58) [snapback]49680[/snapback]
Дык если нужен массив, то куда от этого денешся? чем его замениш? Изобретать непонятно что? Вот массив ненужно использовать вместо одной переменной. И замарачиваться имхо поэтому вопросу не стоит.

Ну почему же не стОит? (ударение тут ставим, я думаю?) smile.gif Очень даже стОит. Хотя бы для лучшего понимания процессов. И вообще - наличие таких вопросов (в начале темы) говорит о том, что человек очень даже вдумчиво делает программы, а не бездумно "кОдит" smile.gif
Я лично "за" такие вопросы. Чем их больше, тем лучше понимание. Я вот, например, не всё далеко знаю. Но вот один человек озадачиться подобным вопросом, я почитаю... И тоже умнее становлюсь.

Вывод: вопросам на понимание процессов - быть! (Точка. Печать. Вердикт окончательный и обсуждению не подлежит smile.gif)

PS. Vaska - а я и не собирался никакие циклы писать в данном случае smile.gif

На счет "не стОит" - это вы правильно поняли smile.gif) На счет самой темы я ж тоже непротив, я только высказал свое мнение. Я тоже многого незнаю, но на этом форуме много чего полезного нашел clapping.gif К тому ж этот форум очень часто веселит! smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.