|
|
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
Что в нём особенного? 1) Отказ от integer в пользу NativeUInt 1.1) У списка не должно быть отрицательных чисел, включая управляющие процедуры 1.2) На 32 битной платформе доступно 4294967295 записей вместо 2147483647 1.3) На 64 битной платформе будет доступно 18446744073709551615 2) В два раза быстрее добавляет записи ! Чем стандартный TList<> 2.1) Стандартный отрабатывает за 0.971365 - 1.006337 + Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 2.2) Данный класс отрабатывает 0.527339 - 0.530999 + Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 3) Малое потребление памяти. 3.1) Стандартный при 50000000 записей - 262 МБ 3.2) Данный класс при 50000000 - 197 МБ Сам класс + Код: plaintext 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. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. Появился лишний часик, и я докинул стандартные функции к своему классу -------------- Тесты в студию! Проект в архиве с классом. + Код: plaintext 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. Вот такие вот результаты при релизе Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. (Обратите внимания, что есть очитка Free иначе бы памяти не хватило) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 03:07 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
64 битный компилятор показал такие результаты Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Ну ещё раз 32 битный Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 03:25 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
rgreat, Хде плагиат?? И рядом не стояло! Медленнее всего на свете Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. test code Код: 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. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 04:26 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоНа 32 битной платформе доступно 4294967295 записей вместо 2147483647Не верю, что ты сможешь создать свой массив с кол-вом элементов 2147483647 при T=Byte, не говоря о большем. Ты просчитался. Гирлионайльдо1) Отказ от integer в пользу NativeUInt 1.1) У списка не должно быть отрицательных чисел, включая управляющие процедуры Неюзабельно. Дальше, в принципе, можно не смотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 05:52 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
YuRock Неюзабельно. Дальше, в принципе, можно не смотреть.[/quot] Приведи пример, почему это "НеЮзабельно" За то я могу привести целый миллион примеров, как это можно применить Один из примеров, больше не надо делать проверку на отрицание/ Что? Скажешь ты мне. А вот - Код: pascal 1. А было бы это вот так Код: pascal 1. Капец как не юзабельно! - Насчёт памяти, 2 гб не предел!. Через SetPEFlags можно установить до 4 гб. По этому то я и сделал Cardinal по умолчанию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 07:26 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, В код лезть самому смотреть только за этим пока не хочется, но что таки означает п.2 - "у списка не должно быть отрицательных чисел"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 08:33 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, повторюсь: нет нотификации. если не знаешь что это, то вот пример для удаления: procedure TList.Delete(Index: Integer); if (Temp <> nil) and (ClassType <> TList) then Notify(Temp, lnDeleted); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 09:43 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
С управляемыми типами работать не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 12:44 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Работает. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 13:45 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
Vlad FГирлионайльдо, В код лезть самому смотреть только за этим пока не хочется, но что таки означает п.2 - "у списка не должно быть отрицательных чисел"? Это когда ты пишешь Код: pascal 1. И в работе кода, тебя предупреждение по попке нежно бьёт ремнём, и говорит что так низзяя А если сделать UInt то отрицательных значений не будет. И компилятор на стадии компиляции скажет - E1012 Constant expression violates subrange bounds ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 13:50 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоРаботает. Лучше тестируй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 13:56 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Строки не теряются. Я уже сделал многомерный массив из много вложений управляемыми типами. И на конце всё доходит, и освобождается. Не знаю, не знаю. Моя фантазия закончилась, где бы она мне пинок под зад дала ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 13:58 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдоrgreat, Хде плагиат?? И рядом не стояло! Медленнее всего на свете У тебя в тесте мой древний код. Еще без оптимизации. автор x32: TList: Add: 2.704769 Free: 1.291943 TArrayEx: Add: 1.826981 Free: 0.107918 TArrayExRgreat: Add: 2.458227 Free: 0.101365 x64: TList: Add: 2.367541 Free: 1.489371 TArrayEx: Add: 2.778226 Free: 0.174325 TArrayExRgreat: Add: 2.000243 Free: 0.105490 Ну и функционала у меня в разы больше. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 14:24 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоVlad FГирлионайльдо, В код лезть самому смотреть только за этим пока не хочется, но что таки означает п.2 - "у списка не должно быть отрицательных чисел"? Это когда ты пишешь tlist.delete(-5); И в работе кода, тебя предупреждение по попке нежно бьёт ремнём, и говорит что так низзяя А если сделать UInt то отрицательных значений не будет. И компилятор на стадии компиляции скажет- E1012 Constant expression violates subrange bounds Т.е. вместо "чисел" и "значений" ты хотел сказать "индексов"? И второй раз не смог?? Так нельзя. Априори подрываешь доверие к плодам рук своих.)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 14:26 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдоmakhaon, А хде она есть?))) И зачем???))) Для какой балды Ну ты хоть исходники Delphi смотрел? Перед тем, как их править? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 14:34 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Похоже проблема в SysReallocMem. Посмотрю чем эту функцию заменить. rgreat, Как так выходит, что у меня на пк твоя функция на 7 секунд медленнее ? Vlad FТак нельзя. Априори подрываешь доверие к плодам рук своих.)) Стереотипы должны умереть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 14:59 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоКак так выходит, что у меня на пк твоя функция на 7 секунд медленнее ? .Optimisation=False? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 15:01 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоПохоже проблема в SysReallocMem. Посмотрю чем эту функцию заменить. Проблема в том, что выделяемая память не очищается, что для размещения данных управляемых типов делать необходимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 15:06 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоСтереотипы должны умереть. А чего у тебя метод Insert делает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 15:09 |
|
||
|
Быстрый список TArrayEx
|
|||
|---|---|---|---|
|
#18+
rgreatГирлионайльдоКак так выходит, что у меня на пк твоя функция на 7 секунд медленнее ? .Optimisation=False? Я релизе всегда она включена. Не может быть такого в приоре, что бы его код был быстрее. Он же за каждый add дёргает увеличение через SetLength Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Kazantsev AlexeyПроблема в том, что выделяемая память не очищается, что для размещения данных управляемых типов делать необходимо. Я вижу что SysReallocMem вернула выделенную память на муссор. (Скорее используемую память) ... А Insert заменяет Найденный элемент в текущий индекс Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2019, 15:13 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39763890&tid=2039881]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
182ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 557ms |

| 0 / 0 |
