PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Поиск дубликатов файлов


Поиск дубликатов файлов

Сообщений 31 страница 36 из 36

31

AZJIO
надо пробовать, мне слабо верится что сработают оба условия (размер, FastMD)
да и что мешает добавить ещё одно условие FastMD2 с твоим вариантом подсчёта.. )

0

32

Пётр написал(а):

Это копирование значения

Сейчас потестировал с очисткой карты до вывода результата, результат был выведен, получается значит копирование.

Потестировал код с поиском хеша только в пределах одинаковых и время выполнения одинаковое. Но так как с временной картой я получил проблему CSV, так как она ранее добавлялась в этот массив данных, то теперь с временной картой я не могу сравнивать с CSV, поэтому версия с этим тестом откатывается к предыдущей.

Lin написал(а):

мне слабо верится что сработают оба условия

теоретически я могу добавить сколько хочешь условий, ведь тест на размер это одно из условий, по результату которого одинарные отсеиваются, потом тест md5, по результатам которого одинарные отсеиваются. Это всего лишь шаг теста, на этапе которого можно отсеять часть файлов создающих проблему, то есть тест, который сделает проверку быстрее чем md5, как и тест размера происходит быстрее чем md5, так как запрашивается готовое число а не вычисляется и не читается файл.

Отредактировано AZJIO (23.06.2022 20:02:32)

0

33

AZJIO написал(а):

Как я понимаю карта при создании структур хранит указатель на структуру, а если я приравниваю, то по факту я думаю что присваиваю указатель

Код

Код:
ListMD5() = MapMD5()

эквивалентен

Код:
CopyStructure(MapMD5(), ListMD5(), StructureName)

То есть производится копирование структуры.
Это легко проверить.

Код:
NewMap MapMD5.POINT()
NewList ListMD5.POINT()

MapMD5("1234")\x=10
MapMD5("1234")\y=20

AddElement(ListMD5())

ListMD5() = MapMD5()

;CopyStructure(MapMD5(), ListMD5(), POINT)

Debug ListMD5()\x
Debug ListMD5()\y

MapMD5("1234")\x=0
MapMD5("1234")\y=200

Debug ListMD5()\x
Debug ListMD5()\y

Если бы копировался указатель, то поменяв данные в ассоциативном массиве, они бы изменились и в списке, но этого не происходит, т. к. разные экземпляры структуры.
Вот копирование указателя.

Код:
NewMap MapMD5.POINT()
NewList *ListMD5.POINT()

MapMD5("1234")\x=10
MapMD5("1234")\y=20

AddElement(*ListMD5())

*ListMD5() = @MapMD5()

Debug *ListMD5()\x
Debug *ListMD5()\y

MapMD5("1234")\x=0
MapMD5("1234")\y=200

Debug *ListMD5()\x
Debug *ListMD5()\y

0

34

Скомпилировал на Linux тоже и пакеты собрал.

Всё-таки тест с отдельной временной картой для одноразмерных вполне возможен без потери CSV, так как можно просто вторым условием (And) выполнить проверку во второй карте созданной на основе файлов CSV. Вот только скорость не улучшилась, не пойму почему. На линукс первое сканирование этой же папки (что на винде 35 сек) было 2,5 минут, а второе сканирование почти мгновенно, 20 сек, а то и меньше.

0

35

AZJIO написал(а):

На линукс первое сканирование этой же папки (что на винде 35 сек) было 2,5 минут, а второе сканирование почти мгновенно, 20 сек, а то и меньше.

Файловая система? Если FAT32/NTFS, то неудивительно.
При втором сканировании, файлы были в памяти и вероятно обращение к диску не осуществлялось.

0

36

Закинул исходник "Search_duplicates-List (структура с tmp, тест).pb" с временной картой для теста, если есть желание тестировать у кого, а я уже буду ковырять только завтра вечером. Сранивать наверно с линуксовым исходником, так как виндовый уже с потоком и разница только в потоке.

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Поиск дубликатов файлов