|
|
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. навострячил тут LRU простенький как часть более крупной задачи. HashMap и список. HashMap на TDictionary<integer,TMyClass> в задаче понатыкано счетчиков производительности. заместо AQtime ) И получилось, что очень большую часть времени отъедает LRU. Начала смотреть и все уперлось в TDictionary А точнее в map.ContainsKey(key) и в node:=map[key]; статистика по LRU примерно такая. Время в секундах lru.get только hashmap 0,648279488394491 (map.ContainsKey(key) и node:=map[key]) lru.get только все остальное 0,408678524370626 lru.put 0,00645377100622397 get counter 3315095 put counter 7185 Собственно вопрос. А можно как то ускорить?) или это предел для TDictionary и вообще для hashmap? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2019, 00:44 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
вернее даже так lru.get только hashmap 0,961819743242614 lru.get только все остальное 0,159336854435245 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2019, 00:46 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Замени TEqualityComparer на свой. Код: 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. 45. Далее: Код: pascal 1. 2. Разница: default1. Benchmark TDictionary<Integer,Integer> Add 10.000.000 integers. 1907 msec. Add 10.000 integers in 10.000.000 iterations. 500 msec. Locate 10.000 integers in 10.000.000 iterations. 422 msec. 2. Benchmark TDictionary<string,Integer> Add 1.000.000 GUIDs. 515 msec. Add 150844 strings in 10.000.000 iterations. 2016 msec. Locate 150844 strings in 10.000.000 iterations. 1875 msec. custom1. Benchmark TDictionary<Integer,Integer> Add 10.000.000 integers. 468 msec. Add 10.000 integers in 10.000.000 iterations. 156 msec. Locate 10.000 integers in 10.000.000 iterations. 94 msec. 2. Benchmark TDictionary<string,Integer> Add 1.000.000 GUIDs. 375 msec. Add 150844 strings in 10.000.000 iterations. 1656 msec. Locate 150844 strings in 10.000.000 iterations. 1547 msec. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2019, 01:16 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Код: 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. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2019, 01:18 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreat, а какова частота коллизий твоего хэша? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2019, 10:46 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Да мне пофигу. Меня результат тестов устраивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2019, 12:44 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrbrgreat, а какова частота коллизий твоего хэша? Это хеш Седжвика (RSHASH). Тут есть данные о коллизиях . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2019, 14:08 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
rashid.abzalov, с тех пор TDictionary afaik стал лучше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2019, 13:15 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
makhaonс тех пор TDictionary afaik стал лучше Да нифига. Хотя, конкретно эта проблема, решается на текущей реализации словаря, буквально, несколькими строчками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2019, 13:32 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
...ну, то есть, чуть лучше, конечно стал, но в целом, всё по-прежнему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2019, 13:41 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, меняя хэш-функцию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2019, 16:13 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrbKazantsev Alexey, меняя хэш-функцию? Нет, достаточно добавить случайный seed в компарер. Это поможет даже если будет использоваться очень простая хеш-функция. А у используемого Дженкинса можно указать initial value. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2019, 17:03 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, а где здесь используется Seed? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. если только a:=Seed; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 13:02 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb, Седжвика можно модифицировать так: Result := Seed; Только seed должен быть результатом предыдущего хеширования этой-же функцией. То есть, выглядеть это может примерно так: Код: pascal 1. 2. 3. 4. 5. 6. В констркторе компарера: Код: pascal 1. В GetHashCode компарера: Код: pascal 1. Этот вариант решит проблему обозначенную в статье, но, от атаки hash-flooding не защитит. Аналогичные манипуляции для Дженкинса избавят и от hash-flooding. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 13:53 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Если уж важна защита от флуда менять надо a:=a*378551; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 13:55 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreat, Рандомно менять эти коэффициенты чревато ростом коллизий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 13:59 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Меняйте через формулу, из простых чисел большого размера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 17:26 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreat, Нужен-то рандом, иначе смысла никакого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 17:32 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Сделать функцию генеряющую простое число от рандома - это проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 17:38 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreat, Сколько таких простых чисел будет в результате? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 17:42 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 19:45 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
~5% от maxint - вполне достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 19:49 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreat, Сомневаюсь, что этого будет достаточно. Значительно более сложный murmur3, изначально сделаный с поддержкой seed, и тот не устоял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 20:21 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeyrgreat, Сомневаюсь, что этого будет достаточно. Значительно более сложный murmur3, изначально сделаный с поддержкой seed, и тот не устоял.Какой смысл пытаться решить принципиально нерешаемую задачу? Но если уж хочеться - меняйте seed пока кол-во коллизий не уменьшиться ниже определенного порога. Ну или пока не надоест. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 21:09 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreatКакой смысл пытаться решить принципиально нерешаемую задачу? Насколько мне известно, на SipHash и BobJenkisnHash lookup3 (тот что в дельфях) с рандомизированным seed атак нет. rgreatНо если уж хочеться - меняйте seed пока кол-во коллизий не уменьшиться ниже определенного порога. Ну или пока не надоест. Нет, я просто не стану использовать функцию, которая для этого не годится. По крайней мере, не таким способом. Есть другой вариант для простых функций - делать двойное хеширование и на завершающем этапе результат одной из функций использовать в качестве входных данных для другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 22:01 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyНасколько мне известно, на SipHash и BobJenkisnHash lookup3 (тот что в дельфях) с рандомизированным seed атак нет.За счет какого волшебного механизма они могут исчезнуть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 22:23 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreatЗа счет какого волшебного механизма они могут исчезнуть? Никто не говорит, что они исчезли. Появится завтра новый метод анализа и, возможно, выработают алгоритм для атаки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 22:52 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey> Появится завтра новый метод анализа и, возможно.... Будет хак, новая версия Delphi или будут юзать старые методы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 23:20 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Довелось сравнить производительность TDictionary<Integer,Integer> в D10.2 и QMap<int, int> в QT 5.12. Сравнение в пользу Delphi. Такой код в Delphi: for I := 1 to 1000000 do d.Add(I, I); выполняется за 400 мс в Debug и 300 мс в Release. В QT (msvc 2015 x86) код for (int i = 0; i < 1000000; ++i) { dict[i] = i; } выполняется 2500 мс (Debug) (релиз не пробовал). Поиск по ключу в Delphi также выполняется быстрее (примерно в 2 раза). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 00:36 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
DmSer, https://doc.qt.io/qt-5/qmap.html The QMap class is a template class that provides a red-black-tree -based dictionary. Какой смысл сравнивать разные структуры? Хеш-таблицы там: QHash и QSet. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 01:13 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyDmSer, https://doc.qt.io/qt-5/qmap.html The QMap class is a template class that provides a red-black-tree -based dictionary. Какой смысл сравнивать разные структуры? Хеш-таблицы там: QHash и QSet. Какая разница что там под капотом? Сравнивались аналогичные инструменты. Попробую еще со стандартным map сравнить. Я c++ не знаю, тем более qt. Может map / QMap никто в качестве словарей не использует. Тогда что используют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 11:50 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Попробую сравнить с QHash. Судя по описанию, оно должно быть ближе к TDictionary в плане реализации. Название правда отпугивает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:05 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
DmSerМожет map / QMap никто в качестве словарей не использует. Тогда что используют. обычно std::map ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:05 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
DmSerКакая разница что там под капотом? Разница большая . Смотри таблицу с ассоциативными контейнерами. QMap and QHash provide very similar functionality. The differences are: QHash provides average faster lookups than QMap. (See Algorithmic Complexity for details.) When iterating over a QHash, the items are arbitrarily ordered. With QMap, the items are always sorted by key. The key type of a QHash must provide operator==() and a global qHash(Key) function. The key type of a QMap must provide operator<() specifying a total order. Since Qt 5.8.1 it is also safe to use a pointer type as key, even if the underlying operator<() does not provide a total order. DmSerСравнивались аналогичные инструменты. Вовсе нет. Словарь - это просто интерфейс. Реализовать его можно очень по-разному. Вот ты взял дельфийский словарь реализованный через хеш-таблицу (просто потому, что других в коробке нет), а сравниваешь со словарём реализованным через красно-чёрное дерево. Правильнее было бы сравнивать с QHash . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:07 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
DmSer Может map / QMap никто в качестве словарей не использует. Тогда что используют.словари на сбалансированных деревьях используют, когда нужны жёсткие гарантии времени - т.е. есть вероятность, что на таблицу могут провести внешнюю атаку и когда нужна упорядоченность по ключу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:15 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
по хэш-таблицам была одна интересная статейка , там подробно описывается как и с чем он борется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:17 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)т.е. есть вероятность, что на таблицу могут провести внешнюю атаку Разве в Qt'шных таблицах это не залечили использованием QT_HASH_SEED? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:18 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeykealon(Ruslan)т.е. есть вероятность, что на таблицу могут провести внешнюю атаку Разве в Qt'шных таблицах это не залечили использованием QT_HASH_SEED?это усложняет, но не исключает самый известный способ для полного "залечивания" - нужно совмещать хэштаблицу и сбалансированное дерево, что сведёт худший случай к O(LOG(N)) в статейке выше есть красивая попытка ещё более усложнить задачу атаки на хэш, но предсказать ошибки в её дееспособности я не могу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:29 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)это усложняет, но не исключает А какая хеш-функция, по дефолту, там используется? Seed они добавили сильно позже чем стало известно о таких атаках, наверняка делали с учётом новых реалий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 12:40 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Скорость QHash сопоставима с TDictionary. Добавление в QHash медленнее (примерно в 2 раза), зато поиск быстрее (в 2 - 3 раза). Цикл for (int i = 0; i < 1000000; ++i) { dict.contains(i); выполняется примерно 60 мс (при Debug) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 15:15 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyА какая хеш-функция, по дефолту, там используется? Seed они добавили сильно позже чем стало известно о таких атаках, наверняка делали с учётом новых реалий.я с Qt на вы, не ковырял реализацию, но принципиально это не поможет при определённом желании с другой стороны - Qt графическая библиотека и не для серверов, с какого ляду кому-то нагружать свой же комп В гуи обычно проблемы когда нужно копировать из одной таблицы в другую, тогда например тот же TDictonary замедлится чудовищно, из-за одинаковых хэш-функций и взаимнопростых делителей. Достаточно поменять что-то одно и всё будет летать - делитель поменять сложно(фактически переписать реализацию), а вот другую хэш-функцию задать довольно просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 16:02 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)я с Qt на вы, не ковырял реализацию, но принципиально это не поможет при определённом желании Нашёл, что там что-то на основе PJW, правда не совсем понятно куда там seed прикрутили. А вообще, проблема с этой атакой вполне решаема. Я писал выше о SipHash, почти все на неё перешли. На один из первых вариантов lookup3 тоже была атака, однако, потом были внесены изменения и про атаки на неё больше не слышно. kealon(Ruslan)Qt графическая библиотека и не для серверов Изначально так и было, но сейчас Qt это полноценный фреймвок с очень неплохим покрытием. Да и что там нужно для серверов, умение в сокеты... kealon(Ruslan)когда нужно копировать из одной таблицы в другую, тогда например тот же TDictonary замедлится чудовищно, из-за одинаковых хэш-функций и взаимнопростых делителей. Достаточно поменять что-то одно и всё будет летать - делитель поменять сложно(фактически переписать реализацию), а вот другую хэш-функцию задать довольно просто. Достаточно искоробочную функцию инициализировать рандомно . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 16:34 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), перевод этот читал раньше, сильные чувства обуревали меня: ) замешаны в кучу правда, догадки, игнор очевидного и странные экперименты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 17:05 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyDmSer, А если обеим таблицам предварительно размер установить ? В QT чуть быстрее стало, однако каждый замер отличается очень большим разбросом, поэтому не могу сказать конкретно, на сколько быстрее, может процентов на 10. Стало в среднем 600 мс. В Delphi стало явно быстрее: 400->280 мс (Debug) и 300->234 мс (Release), причем при каждом замере разброс получается минимальным. Видимо, благодаря замечательному менеджеру памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 17:36 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
DmSer, Похоже, таблицы там используют метод цепочек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 17:58 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeykealon(Ruslan)когда нужно копировать из одной таблицы в другую, тогда например тот же TDictonary замедлится чудовищно, из-за одинаковых хэш-функций и взаимнопростых делителей. Достаточно поменять что-то одно и всё будет летать - делитель поменять сложно(фактически переписать реализацию), а вот другую хэш-функцию задать довольно просто. Достаточно искоробочную функцию инициализировать рандомно . это и есть "поменять хэш-функцию". seed другой -> распределение - другое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 18:18 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
DmSerДовелось сравнить производительность TDictionary<Integer,Integer> в D10.2 и QMap<int, int> в QT 5.12. Сравнение в пользу Delphi. Такой код в Delphi: for I := 1 to 1000000 do d.Add(I, I); выполняется за 400 мс в Debug и 300 мс в Release. В QT (msvc 2015 x86) код for (int i = 0; i < 1000000; ++i) { dict[i] = i; } выполняется 2500 мс (Debug) (релиз не пробовал). Поиск по ключу в Delphi также выполняется быстрее (примерно в 2 раза). ...опиции оптимизации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 18:23 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
ёёёёё...опиции оптимизации? Я ноль в QT, какие опции? :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 18:33 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
DmSerёёёёё...опиции оптимизации? Я ноль в QT, какие опции? :)) Опции компилятора MS VS 2013 (ты ведь о нем?) и эмбаркадеро. Хорошо бы сравнить не "по умолчанию", а сколько получится, если "педаль до полика". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 18:50 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Сравните ради прикола с Rapid.Generics. А то на сайте цифры хорошие, а что на практике - не понятно. TRapidDictionary вроде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 20:28 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Голландец, Оптимизатор, палишься ведь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 20:48 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
ГолландецСравните ради прикола с Rapid.Generics. А то на сайте цифры хорошие, а что на практике - не понятно. TRapidDictionary вроде Вообще, фантастика! Добавление 1000000 - за 62 мс, поиск 1000000 - за 16 мс. Колдовство! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 23:04 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Надо ещё на баги проверить Может оно косячит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 23:11 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
DmSer, Неправильно, ты, дядя Фёдор бутерброд ешь! (c) Выбери сперва четные или нечетные ключи а потом наоборот, т.е. не последовательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2019, 23:55 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyВыбери сперва четные или нечетные ключи а потом наоборот, т.е. не последовательно. А нет, рандомно нужно (жаль, того кода у меня не осталось). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2019, 00:06 |
|
||
|
Производительность TDictionary
|
|||
|---|---|---|---|
|
#18+
ГолландецМожет оно косячит Код: pascal 1. 2. 3. 4. 5. 6. 7. Исправляй, оптимизатор ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2019, 10:53 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2039517]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
474ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 837ms |

| 0 / 0 |
