Преимущества использования хеш-ссылок? - PullRequest
1 голос
/ 17 апреля 2011

Я видел статью о производительности сценариев Perl.

Одна из упомянутых ими вещей - использование ссылок на хеш вместо прямого доступа к хешу каждый раз.

Какую выгоду я получуот ссылки на хеш вместо прямого доступа?

Мой скрипт считывает из списка имен серверов, что теоретически может быть до 100 машин, если кому-то понадобится столько.Поэтому любой импульс, который я могу дать своему сценарию, был бы великолепен.

Ответы [ 4 ]

8 голосов
/ 17 апреля 2011

Я не думаю, что есть большое преимущество $hashref->{"foo"} над $hash{"foo"}. Вероятно, есть небольшое преимущество в передаче хеш-ссылок вместо полных хеш-функций подпрограммам, но это все, что я могу придумать. Я согласен с комментарием Рэйфа о том, что хеш из 100 элементов вряд ли приведет к проблемам с производительностью в любом случае. Если вы не знаете, что у вас есть проблемы с производительностью, связанные с доступом к хеш-таблице, не беспокойтесь об этом.

«Оптимизировать отлаженную программу легче, чем отладку оптимизированной программы.»

2 голосов
/ 17 апреля 2011

Я уже говорил, что 100 - это крошечный для хэша. Я уточню это более общим утверждением:

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

Тем не менее, причина, по которой использование ссылок обеспечивает лучшую производительность, чем передача по значению, заключается в том, что когда вы передаете хэш в качестве аргумента подчиненному объекту, его обычно нужно скопировать, который использует больше памяти. Это только оптимизация, которую необходимо выполнить, если a.) Вы много раз передаете функции большим хэшам и b.) Это заставляет вас использовать слишком много памяти.

0 голосов
/ 18 апреля 2011

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

0 голосов
/ 17 апреля 2011

Ну, как уже упоминал Рэйф, хеш с 100 элементами не очень большой. Можно утверждать, что использование ссылки на хэш не дает вам больших преимуществ по сравнению с использованием обычного хеша - однако это также не дает вам особого недостатка (по крайней мере, я никогда не сталкивался с ним). Так что преждевременная оптимизация не так плоха, как можно подумать.

Если ваш скрипт выполняется слишком медленно, вы можете использовать профилировщик , чтобы узнать, где вы теряете время.

...