|
|
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
Сделал вот такой механизм сравнивания двух файлов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Есть другие предложения? API? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2006, 15:02 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
Используйте стандартные ХЭШ-функции. Не знаете как - пишите свою, но сравнивать в лоб - кому ж такое придет в голову... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2006, 15:56 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
arsenyСделал вот такой механизм сравнивания двух файлов: Код: plaintext 1. 2. 3. 4. Есть другие предложения? API? Еще бы, по одному байту читать! Напр. так: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2006, 16:10 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
vbnet2000Используйте стандартные ХЭШ-функции. Не знаете как - пишите свою, но сравнивать в лоб - кому ж такое придет в голову... Как, интересно, хэш-функции избавят от необходимости ПРОЧИТАТЬ оба исходных файла? Да и вряд ли любые расчеты будут быстрее простого сравнения... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2006, 16:14 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
Несмотря на кажущуюся сложность, хеш работает очень быстро. Однако не надо забывать, что по бинарка быстра тем, что читает почти сразу в память: Код: 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. На 2000Mhz, 1Gb ок. 0.3 сек. на файл MSVBVM50.dll (1.3M) А еще быстрее будет, если вместо byte использовать long. (double неуместен,т.к. там другой алгоритм сравнения) Возможно также строки будут быстры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2006, 17:00 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. И вообще на хрена они б были нужны вообще, если б они работали медленнее прямого сравнения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2006, 18:19 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
У меня получились следующие результаты на MSVBVM50.dll 0,0301 - сравнение с подсчётом CRC32 0,0167 - сравнение от Aklin Выгода использования контрольной суммы проявляется при числе сравнений > 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 10:05 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
Дайте наводку на хеш плиз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 10:17 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
Вы асм знаете? При подсчете используется прямая формула: Код: plaintext 1. 2. 3. При условиях: Код: plaintext 1. 2. 3. 4. 5. 6. 2 комадны вместо 1!!! причем код загружается в кеш, а при передачи управления (jmp например) кеш приходится очищать -> время!!! Также в процессоре конвеер (в P4 на 20 строк) очищается при передачи управления -> приходится заново его заполнять. Так что CRC аппаратно быстрее раз эдак в 10... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 11:25 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
Вообще-то от VB-кода до асма далеко как до Луны. Большое количество операций идет через вызов функций msvbvm60.dll XOR выполняется вызовом __vbavarxor, сравнение строк через __vbastrcomp, так что это еще бабка надвое сказала, какой вариант будет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 12:55 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
Еще один важный момент - все операции с Variant происходят через вызовы функций, поэтому Variant крайне нежелательно использовать в часто исполняемом коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 13:00 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
Variant и String не совсем в тему, но уже очевидно, что сравнение двух Long'ов будет быстрее, чем XOR. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 13:17 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
В общем используй StrComp, в качестве параметров можешь передавать непосредственно байтовые массивы. Два массива размером 60 мегов сравниваются меньше, чем за секунду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 13:34 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
А так не проще? Или что-то не так забабацал? Сравнивает за милисекунды файлы по 400 кб. Сделано по образцу из документации по 'Get': Тестировано на 2 одинаковых файлах и на 2 разных файлах. Надо мудрить или так оставить? :-) Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2006, 14:11 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
Тест на msvbvm50.dll 0,03 - сравнение с подсчётом CRC32 0,0163 - сравнение от Aklin 0,022 - сравнение текста от arseny (Compare2Files = Var1 = Var2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2006, 16:07 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
vbnet2000 Код: plaintext 1. И вообще на хрена они б были нужны вообще, если б они работали медленнее прямого сравнения?Я думаю, СУБД сталкиваются с задачей МНОГОКРАТНОГО перекрестного сравнения больших наборов значений. Т.е. их приходится либо многократно прочитывать (что нереально), либо кэшировать, причем хэш пзволяет экономить память. К задаче ОДНОКРАТНОГО сравнения это, ИМХО, вообще отношения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 15:25 |
|
||
|
Сравнить файлы
|
|||
|---|---|---|---|
|
#18+
а чем команда fc не нравится? Что-то вроде Shell "fc.exe /b file1 file2 >compareresult.txt",,,,Wait open "compareresult.txt" for input as #1 Line input #1,S 'анализ строки.если совпадают - должно вернуться только две строки с текстом close #1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 17:01 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=33827556&tid=2165611]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
167ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 216ms |
| total: | 510ms |

| 0 / 0 |
