|
|
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatБез сравнения с другими мало о чем говорит, кроме того что поиск у тебя гораздо быстрей добавления. Это потому, что ищу в пустом словаре ) Сорри, после копи-паста забыл убрать вызов Clear. После исправления поиск и вставка работают одинаково медленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2017, 08:30:02 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, Делаю сейчас комплексный бенчмарк. Судя по всему, ты смог добиться действительно классных результатов Только у тебя много классов, я так и не понял что брать. В бенчмарке используются классы хеш-таблиц с дефолтными хешами TDictionary, THashTable или использовать какую-то другую комбинацию кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 00:15:40 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUrgreat, Делаю сейчас комплексный бенчмарк. Судя по всему, ты смог добиться действительно классных результатовНадо-же. Я когда их пилил о особой скорости думал. Сделаешь бенч - интересно будет глянуть. http://www.rgreat.ru/tmp/Delphi/Test.zip Только у тебя много классов, я так и не понял что брать. В бенчмарке используются классы хеш-таблиц с дефолтными хешами TDictionary, THashTable или использовать какую-то другую комбинацию кода?Если тебе нужны объекты с хешами то: THashTable<T> TArrayEx<T> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 02:20:10 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Добавил в свой тест твою Rapid.Generics. По моим тестам x32 так вышло: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. На первый взгляд у тебя очень шустро вышло. В x64 Rapid.Generics не билдится. Ну и твой TDictionary рушится при Create. Кстати, не надо так называть классы. TDictionary уже есть в базе. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 03:01:58 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, Так THashTable<T> или TArrayEx<T>? В чём отличие то? :) И, помнится (если не путаю), у тебя были более быстрые аналоги хешей. Это в каком модуле и как применять? ) Судя по тому, что я увидел... бегло... у тебя код очень похож на стандартный TDictionary. Имеет ли смысл менять класс, может просто взять твой хеш-компаратор? Кстати, не надо так называть классы. TDictionary уже есть в базе. :) Так в том и суть :) Там полные эквиваленты TDictionary, TList, TQueue, TStack, TArray, ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 04:31:31 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUrgreat, Так THashTable<T> или TArrayEx<T>? В чём отличие то? :) Первое - это словарь. Второе - массив, с опциональным поиском в нем через хеш. И, помнится (если не путаю), у тебя были более быстрые аналоги хешей. Это в каком модуле и как применять? ) Судя по тому, что я увидел... бегло... у тебя код очень похож на стандартный TDictionary. Имеет ли смысл менять класс, может просто взять твой хеш-компаратор? Вот тут возьми. https://quality.embarcadero.com/browse/RSP-16730 Так в том и суть :) Там полные эквиваленты TDictionary, TList, TQueue, TStack, TArray, ...Рисковый подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 16:15:45 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, А в чём преимущество THashTable относительно стандартного TDictionary? Скинь сюда, пожалуйста, я там не зарегистрирован В общем скажи наиболее эффективный способ воспользоваться твоими наработками? THashTable + альтернативные хеши? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 17:47:37 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatВот тут возьми. https://quality.embarcadero.com/browse/RSP-16730 Там рекомендуется Код: pascal 1. 2. 3. 4. Так нельзя делать. Это будет тормозить, например, если все Value имеют вид 256*i. Имеет смысл использовать функции "взбалтывания", см. пример http://guildalfa.ru/alsha/node/32 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 20:24:02 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
А альтернативные хеши на дженкинсе никто не делал? Имею ввиду реализации IEqualityComparer<T> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 20:47:31 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Блин, хотел модуль Шарахова добавить, а UnicodeString нет, RawByteString-таблица основана на поле в обжекте Нет, хватит париться ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 21:40:20 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovТак нельзя делать. Это будет тормозить, например, если все Value имеют вид 256*i. Имеет смысл использовать функции "взбалтывания", см. пример http://guildalfa.ru/alsha/node/32 Под любой хеш используемый в виде цепочек можно подобрать такие Value что его поставит раком. Какой смысл все усложнять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 22:25:36 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
На случайных ключах для SizeOf(Value)<=4 быстрей чем Hash:=Value нет ничего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 22:28:22 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatAleksandr SharahovТак нельзя делать. Это будет тормозить, например, если все Value имеют вид 256*i. Имеет смысл использовать функции "взбалтывания", см. пример http://guildalfa.ru/alsha/node/32 Под любой хеш используемый в виде цепочек можно подобрать такие Value что его поставит раком. Какой смысл все усложнять? Мы боремся не с атакой на хеш. Это бред. Мы боремся с регулярностью ключа. А это реальность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 22:28:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Хотел сказать SizeOf(Value)=4. Там где SizeOf(Value)<4 можно соптимизировать попростому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2017, 22:30:29 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Завершил бенчмарки для проекта Rapid.Generics: https://github.com/d-mozulyov/Rapid.Generics Вот бенчмарк по хеш-таблицам: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 00:56:14 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Что за единицы измерения в этой таблице. Не комильфо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:05:26 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Что такое 8752 и почему оно такое большое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:06:32 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, Миллисекунды Но важны не они, а коэффициент прироста производительности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:07:00 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Чем отличается Dictionary of RapidDictionary? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:08:13 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, 8,5 секунд Видимо для Integer хеш даёт много коллизий, и для реализации стандартного TDictionary это даёт серьёзную просадку производительности при добавлении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:10:36 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreat, TRapidDictionary не позволяет задать хеш-компаратор Используются дефолтные и инлайнятся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:12:05 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovМы боремся не с атакой на хеш. Это бред. Мы боремся с регулярностью ключа. А это реальность.Надежней через Capacity это решить. При условии что положение в листе ищется через n:=Value mod Capacity. И коллизий не будет и в скорости не потеряешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:14:36 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUrgreat, 8,5 секунд Видимо для Integer хеш даёт много коллизий, и для реализации стандартного TDictionary это даёт серьёзную просадку производительности при добавлении Поменяй свое Код: pascal 1. 2. 3. 4. 5. на Код: pascal 1. 2. 3. 4. Проверь разницу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:16:21 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUrgreat, А в чём преимущество THashTable относительно стандартного TDictionary? - Наличие доступа к данным через индекс в массиве словаря, а не только через ключ. - Скорость работы мало страдает от коллизий хеша. - Автоматическое очищение хранимых объектных типов при удалении (отключаемое). - Возможность задания Default значения в случше ненахождения значения в словаре. - BeginUpdates/EndUpdates для пакетного изменения. - Режим хранения значений с дублирующимися ключами. - Lock/Unlock/isLocked. - Tag и прочие мелочи. :) THashTable + альтернативные хеши?Идеала не существует. Кому что больше прет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:29:52 |
|
||
|
TDictionary или TList<>.BinarySearch с позиции поиска
|
|||
|---|---|---|---|
|
#18+
rgreatПроверь разницу. Лень Там исходники бенчмарка открыты, посмотри, если хочешь Вангую, что скорость будет как у TRapidGenerics Но я считаю, предложенный тобой способ не надёжен для универсального использования. Хотя в частных случаях годится - вполне ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2017, 01:47:41 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39422032&tid=2041988]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
180ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 452ms |

| 0 / 0 |
