Цитата romeo91:
DRP изначально для создания БД использовал regexp, но поковырявшись с ним я понял, что он не обеспечивает нужного быстродействия (хотя похоже я ошибался), я переделал создание БД на основе работы с inf файлом - как с ini-файлом (хотя есть и отличия от ini)
|
Тот парсер в DRP тогда был очень неэффективен и он при обработке не учитывал структуру inf файлов, собирал много мусора и пропускал HWIDы. Обработка текущим парсером быстрее возможно по тому что текущий парсер на регэкспах однопроходный, а при использовании функций работы с inf, эти функции вынуждены делать одни и те же подготовительные операции для извлечения каждого HWIDа. Стоит заметить что скорость движка регэкспов и поддержка фич, которые позволяют создавать более эффективные регэкспы в JavaScript и VBScript сильно уступает другим движкам регэкспов.
Цитата romeo91:
Также мне интересно, могу ли я еу себя реализовать некие hash- таблицы? или это плюс java-script
|
Это скорее минус JavaScript'а, так как 4 кратное ускорение просто не серьезно. Это довольно стандартный и распространенный алгоритм, я его выбрал поскольку он оптимален для данной задачи. Но поскольку JavaScript не умеет работать с бинарными файлами hash'ы вдвое большего размера чем могли быть и это также накладывает пенальти за преобразование из текстово-шестнадцетиричного в бинарный вид. JavaScript не имеет произвольного доступа к файлам и вынуждена проглатывать все хеши и индексы, хотя в этом нет необходимости. Например: из проглоченных 44 мегабайтов в папке индексов, достаточно было загрузить всего 2.7 мегабайта.
VB умеет работать с бинарными файлами и имеет произвольный доступ и я оцениваю что это ускорит подбор драйверов как минимум в 100 раз.
Коротко объясню принцип hash-таблиц на простом примере.
Задача: найти слово в списке из 100 000 слов. Слова не повторяются, а значит после нахождения слова можно прекращать поиск.
При решении в лоб, при наихудшем раскладе придется проверить все 100 000 слов, в среднем для нахождения приходится проверять около половины из этих слов. Если слова повторяются, то придется не останавливаться при нахождении первого совпадения и всегда проходить через все 100 000 слова.
Реализация с помощью hash-таблиц.
В среднем слово можно найти проверив всего 2 слова из этого списка, если ни одно из них не оказалось искомым, то значит что слова нет в списке: проверять оставшиеся 999 998 слова не нужно. При наихудшем раскладе приходится проверить 10 слов. Это число примерное и так случается редко. Вообще-то говоря, при целенаправленной hash-атаке хакера на сервера, наихудший расклад становится таким плохим что это может вызвать перегрузки серверов и отказ системы. DPS не содержит защиты от hash-атак. Если производители драйверов начнут целенаправленно создавать специальные inf'ы чтобы замедлить подбор драйверов с помощью DPS, то у меня будет возможность сменить hash-функцию, которая не будет давать наихудший возможно расклад на такие inf'ы. Но, надеюсь, до этого не дойдет.
Цитата romeo91:
Но к сожалению я не профи (вы я так понимаю знаете не один язык, и на довольно хорошем уровне), а лишь любитель, поэтому мой код далек от совершенства, а следовательно и быстродействия. Некоторые аспекты я познавал в процессе написания программы.
|
Я вообще-то не работал и не работаю программистом по профессионально, по работе я чиню компы. Знание многих языков и умение в короткие сроки освоить новый язык - обычное явление у программистов.
Цитата romeo91:
Да на VB, к сожалению это то на чем я хоть как-то умею писать. Далеко не лучший язык
|
Для новичков это, пожалуй, хороший язык. Я увлекся программированием на денди-совместимой приставке Subor. Это приставка сделана в виде клавиатуры и там был как раз Basic. На нем можно делать программы для вычислений и создавать графические игры(там есть средства для рисования спрайтов и считывания нажатий кнопок с джойстика). К сожалению программы нельзя было сохранить и их приходилось набирать заново, а также приставка зависала из-за слишком длинного кода.