|
|
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
Вкратце, в 12 секунд выигрыш при сортировке файлов у меня в программе Писалось для 64 битной платформы, быстрее в 2.3 - 2.5 раза, самые лучшие результаты fast - 1,025. Для стандартной 2,318 Ну а для 32 битного приложения fast - 1,005 для той 1,969 Если нужно будет быстренько продрать 1000000 миллионов путей, то fast выдаст 9,983 когда стандартная 18,995 на 64 к слову 9,926 - 21,871 Код: 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. 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. Выигрыш обусловлен тем, что стандартная функция постоянно то добавляет \...\ то удаляет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2019, 23:16 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
Озвучьте изначальную задачу. Причем тут сортировка и эта потенциально глючная поделка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2019, 18:04 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
white_nigger, так вывести файлики которые сейчас проходят обработку. И она совершенно не глючная. Она работает как для путей с \ так и / ломанных. И работает точно так же. Конечно же если не давать ей кушать в край неверные пути. Но это и не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2019, 18:08 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
Cравни с PathCompactPath https://docs.microsoft.com/en-us/windows/desktop/api/shlwapi/nf-shlwapi-pathcompactpathaw ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2019, 18:11 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
shonli95И она совершенно не глючная.shonli95 Код: pascal 1. Это как минимум Вот второй багshonli95 Код: pascal 1. Дальше не смотрел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2019, 19:03 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
shonli95быстренько продрать 1000000 миллионов путей миллион миллионов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 08:26 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Хде баг? Ко - ко - ко. Код: pascal 1. 2. Я вижу что он присвоил адрес Filename в ebx Потом он делает Код: pascal 1. 2. И естественно сверяет Код: pascal 1. 2. 3. И если мы проверим конец функции Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. То убедимся что там нет очистки ebx и это простой адрес, если бы это было Integer и так далее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 09:24 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
X11shonli95быстренько продрать 1000000 миллионов путей миллион миллионов? Ага, 5000000 миллионов. Но это погрешность в быстром фильтре ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 09:26 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Даже если сделать так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. То компилятор вырежет StrCurr := nil. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 09:29 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
shonli95_Vasilisk_, Хде баг? Ко - ко - ко. как минимум для начала: 1. Cardinal represents a subset of the natural numbers. The range for the Cardinal type is from 0 through 4294967295. The size of Cardinal is 32 bits across all 64-bit and 32-bit platforms. 2. The size of a pointer depends on the operating system and/or the processor. On 32-bit platforms, a pointer is stored on 4 bytes as a 32-bit address. On 64-bit platforms, a pointer is stored on 8 bytes as a 64-bit address после этого смотрим код: Код: pascal 1. Так что иди кукарекай дальше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 09:55 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
asutp2, Там не нужен NativeUInt потому как Код: pascal 1. То есть если проще говорить, мы в первую очередь проверяем диапазон выхода, который всегда будет равен тому, что изначально строка ровна главной строке. При этом, округление Cardinal не будет мешать правильной работе кода Так как округление всегда будет ровно главной строке в любом случае. И это не даст санкционировать баг. Ещё проще говоря Код: pascal 1. 2. 3. 4. 5. Код: pascal 1. 2. 3. 4. 5. Из этого следует, что он сгенерирует одинаковый код И бага никакого не существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 11:51 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
Я то думал что эти азы все знают. Но я ошибался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 11:53 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
shonli95asutp2, Ещё проще говоря Код: pascal 1. Код: pascal 1. Из этого следует, что он сгенерирует одинаковый код Тебя не смущает, что в первом случае 32-битное сравнение, а во втором - 64-битное ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 12:08 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
shonli95_Vasilisk_, Хде баг? Ко - ко - ко. Код: pascal 1. 2. Я вижу что он присвоил адрес Filename в ebx Что будет, если FileName = '' ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 12:11 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Вот второй багshonli95 Код: pascal 1. Это не баг, так можно делать. Во избежание "лишнего" вызова _UStrToPWChar ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 12:12 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
alekcvpshonli95_Vasilisk_, Хде баг? Ко - ко - ко. Код: pascal 1. 2. Я вижу что он присвоил адрес Filename в ebx Что будет, если FileName = '' ? Будет StrCurr = nil ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 12:13 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
КвейдЭто не баг, так можно делать. Во избежание "лишнего" вызова _UStrToPWChar Так можно делать, если ты на 100% уверен что строка не пустая (или проверяешь это дальше). Квейдalekcvpпропущено... Что будет, если FileName = '' ? Будет StrCurr = nil Правильно, а что, после этого, у нас будет вот здесь? Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 12:21 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
alekcvpКвейдЭто не баг, так можно делать. Во избежание "лишнего" вызова _UStrToPWChar Так можно делать, если ты на 100% уверен что строка не пустая (или проверяешь это дальше). Квейдпропущено... Будет StrCurr = nil Правильно, а что, после этого, у нас будет вот здесь? Код: pascal 1. 2. это к автору :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 12:27 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
alekcvpshonli95asutp2, Ещё проще говоря Код: pascal 1. Код: pascal 1. Из этого следует, что он сгенерирует одинаковый код Тебя не смущает, что в первом случае 32-битное сравнение, а во втором - 64-битное ?Его такие мелочи в принципе не смущают))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 12:27 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
alekcvpТебя не смущает, что в первом случае 32-битное сравнение, а во втором - 64-битное ? 20 % 15 = 5 так и тут. Я уже описал этот феномен, когда одна строка указывает на другую. В сдучае 15 это SizeOf(X) alekcvpЧто будет, если FileName = '' ? Код: pascal 1. 2. А там где StrCurr^ текущий символ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 12:31 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
Вы сейчас из мухи слона пытаетесь высосать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 12:31 |
|
||
|
MinimizeNameFast
|
|||
|---|---|---|---|
|
#18+
shonli95alekcvpТебя не смущает, что в первом случае 32-битное сравнение, а во втором - 64-битное ? 20 % 15 = 5 так и тут. Я уже описал этот феномен, когда одна строка указывает на другую. В сдучае 15 это SizeOf(X) Хорошо, покажу на пальцах: Pointer(FileName) = $00004567FFFFFFF0 Length(FileName) = 32 Имеем: Код: pascal 1. 2. StrCurr = $0000456800000010 Внимание вопрос: чему равно условие? Код: pascal 1. ОтветCardinal($FFFFFFF0) >= Cardinal($00000010) = True! Внезапно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 12:46 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=73&tid=2039480]: |
0ms |
get settings: |
4ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 194ms |
| total: | 330ms |

| 0 / 0 |
