Использование метода .Contains с кэшированным Hashset - PullRequest
1 голос
/ 26 июля 2011

Я знаю, что метод .Contains для хэш-набора работает быстро. Мой вопрос заключается в том, что является лучшим методом для получения данных хэш-набора перед повторным использованием метода .Contains?

Я могу придумать 2 варианта. Оба эти примера будут вызваны в цикле неопределенной длины.


1) Вызовите метод, который возвращает кэшированный хэш-набор напрямую, и используйте метод .Contains.

IF (GetHashSetMethod.Contains("TESTVALUE") THEN BLAH, BLAH, BLAH...

2) Создайте новый хэш-набор вне цикла и загрузите в него кэшированные данные хеш-набора, чтобы метод, который возвращает хеш-набор, вызывался только один раз, затем используйте метод .Contains.

DIM HashTest AS HASHSET(OF String) = GetHashSetMethod

Затем в цикле:

if (HashTest.Contains("TESTVALUE") THEN BLAH, BLAH, BLAH...

Я использовал метод 1. Должен ли я вообще думать о переходе на метод 2? Есть ли третий вариант, о котором я даже не подумал? Имеет ли это значение, потому что данные для начала кэшируются?

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

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

Для ясности кода я бы предложил вам выбрать решение 2. Это будет код, который будет легче понять, поддерживать и отлаживать, если все пойдет не так.

1 голос
/ 26 июля 2011

Как правило, если вы выполняете цикл, вы должны делать все, что можно сделать вне цикла вне цикла.

Это может не привести к заметному изменению производительности, поскольку современные процессоры безумно быстрые, и компилятор можетоптимизировать код.Однако, на мой взгляд, это чище.Код внутри цикла концентрируется на своей собственной цели и не должен выполнять «установочный» код на каждом шаге.

Другим соображением является изменение кода.Если ваши сегодняшние GetHashSetMethod просто возвращают ссылку на синглтон, вы не почувствуете разницы в скорости.Однако, как только кто-то изменит его на (например) загрузку данных хеш-наборов из файла, у вас возникнет проблема, если вы получите HashSet n-раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...