[Ответить в тред] Ответить в тред

Check this out!


<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
50 | 6 | 41

Dll и миллион If Аноним 14/11/18 Срд 22:20:38  1295604  
1542223234924.jpeg (150Кб, 720x1280)
Доброго времени суток. Други, а шо если всунуть в DLL очень большую программу в почти 1000000 строк?
Необходимо компильнуть огромный код в около миллиона строк. Код правда индусский, признаюсь. Тупо if then . И так миллион раз необходимо.
А точнее вот что нужно:
If A = 'Кошка' Then
Begin
B := 'Вода';
Exit;
End;


If A = 'Камень' Then
Begin
B := 'Спица';
Exit;
End;

.........

If A = 'Бутерброд' Then
Begin
B := 'Созвездие'
Exit;
End;


Ну короче говоря , далее билеберда в том же духе. Тупо рандомные слова.
И таких условий миллион в общей сумме.
Вопрос. Есть ли лимит в числе строк кода? Не будет ли вываливаться ошибка во время Building dll 'ки ?
В дальнейшем собираюсь вызывать эту Dll экзешкой для поска пары слов. Т.е к примеру передаю строковое значение 'Телевизор', а dll должна вернуть, ну к примеру - 'Гвоздь'.
И не будет ли просадки в быстродействии? If ов ведь овердохуя. Или лучше лучше развернуть громадный Case of: ?
(Работаю в Delphi)

Аноним 14/11/18 Срд 22:40:17  1295610
>>1295604 (OP)
А перевести (программно) кучу ифов в нормальую структуру не вариант?
Аноним 14/11/18 Срд 22:42:35  1295612
>>1295610
Что ты имеешь ввиду? Я уже, программно написал эти миллион if-then'oв в блокнот.
Разверни поподробнее мысль о структурировании пожалуйста
Аноним 14/11/18 Срд 23:47:27  1295631
толсто
Аноним 15/11/18 Чтв 03:10:28  1295689
image.png (432Кб, 729x533)
https://ru.wikipedia.org/wiki/Ассоциативный_массив#Delphi
ОП, читай этот >>1289159 (OP) тред, очень скоро инфа из него тебе пригодится.
Аноним 15/11/18 Чтв 07:13:23  1295707
image.png (32Кб, 382x505)
>>1295604 (OP)
Специально счс поискал на своём компьютере - самая большая DLL "весит" 310 МБ (я сам в ахуе)
В целом, не важно, какого она размера.
Но твой говно-код будет крайне долго выполняться.
Делай бинарные деревья, препод похвалит.
Да даже switch/case (в Delphi это просто case) будет быстрее выполняться.
Ну или ассоциативные массивы, как тебе выше писали.
Аноним 15/11/18 Чтв 08:49:45  1295740
>>1295707
> препод похвалит
Нет, я для личных нужд. Я уже лет 10 как не студент ))
Аноним 15/11/18 Чтв 15:15:34  1295865
>>1295740
> Нет, я для личных нужд. Я уже лет 10 как не студент ))
Надеюсь, не программист?
Аноним 15/11/18 Чтв 18:07:24  1295927
>>1295707
>Но твой говно-код будет крайне долго выполняться.
Да ну, там инструкций максимум на десяток миллионов наберется. Это меньше секунды на современных процах.
Аноним 15/11/18 Чтв 18:43:27  1295943
>>1295865
Какая разница кто я.
Нет, я не программист. Базовыми навыками конечно владею. Чисто для себя иногда приложения создаю всякие
Аноним # OP  15/11/18 Чтв 18:51:02  1295951
Короче. Попробовал сегодня в отдельную dll компильнуть свою громадную функцию, разумеется чтобы в дальнейшем вызывать через обращение из ехе к dll. Peхультат - нихуя не компилируется! Слишком большой код.
А когда превращаю в комментарий большую часть кода -{ } , примерно с 20000 чного if по миллионный, то компилируется нормально и ввзов происходит хорошо. Функция разумеется хорошо возвращает значения.
Может думаю, попотеть eще по дня и разбить всё это дело на пару десятков мелких dll ? Сложность чисто в правильном копипасте кусков кода. Но тогда время будет теряться на поиск нужной dll (библиотеке так сказать)
Аноним # OP  15/11/18 Чтв 18:55:20  1295953
Когда кода немного ( около 30000 строк), то это всё дело и внутри ехе умещается компилируется и работает. Ехе сразу толстеет разумеется, со стандартных 350 КБ до 16 МБ. Но вроде пашет всё нормально.
Может на другом каком-нибудь ЯП попробовать это всё дело реализовать? На С++ к примеру. Но если чисто dll собрать на другом языке, то ладно. Весь код остальной хочу в Delphi писать
Аноним 15/11/18 Чтв 19:08:09  1295955
>>1295951
Насколько помню, там где-то в настройках проекта выбирались размеры, ну там small code, huge code. Может в эту сторону копать?
Почему ты не хочешь сделать это в базе данных, кстати, ну там sqlite или firebird (он есть portable версия). Там уже сразу механизмы все есть быстрого поиска (в индексе). И система получится расширяемой.
Аноним 15/11/18 Чтв 19:10:10  1295956
>>1295604 (OP)
>If A = 'Кошка' Then
>Begin
>B := 'Вода';
>Exit;
Cделать БД, хоть и самописную не варик?
Аноним # OP  15/11/18 Чтв 19:35:24  1295967
>>1295955
>>1295956
Да, скорее всего придется через БД реализовывать всё это
Аноним # OP  15/11/18 Чтв 20:28:45  1295993
>>1295956
Я даже делал следующим образом. Выписал все значения которыми буду оперировать в один последовательный текстовый файл , формата:
AAAAAABBBBBBCCCCCCDDDDDDEE....
Т.е из расчета , что каждое последующее 6 значное "слово" , является возвращаемым значением предыдущего.
Т.е вызываю самописную функцию next(s: string): string; c параметром next('SSSSSS'), а она возвращает значение 'TTTTTT'. Поскольку длина всех слов фиксированная =(6 знаков), я считываю из файла последовательности из шести символов, типо:
while copy(stroka,i*6, 6) <> 'искомое' do i++. типо того короче
Полученное решение работает, но когда искомая шестерка символов находится в файле ближе к середине и глубже, то это всё дико тормозит. Примерно по 0.3 сек тратится на поиск возвращаемого значения
Аноним 15/11/18 Чтв 21:26:13  1296019
>>1295993
Бля, это ты тот анон, который номера машин собирать собрался?
Аноним # OP  15/11/18 Чтв 22:06:26  1296028
>>1296019
Бляха муха )
Я знал что кто-то узнает меня . Да, это я. Доси ебусь с этой системой бро, не поверишь
Аноним 15/11/18 Чтв 22:16:10  1296033
>>1295993
>while copy(stroka,i*6, 6)
Нахуя? При старте программы считываешь данные из файла и сохраняешь их в хешмап. Ну а потом используешь его (B := HashMap[A]).
Аноним # OP  15/11/18 Чтв 22:35:03  1296035
>>1296033
Ну разумеется. Я ведь если напрямую с файлом буду работать - это вообще тормоза будут сплошные.
Я загружаю данную строку из файла в длинную строковую переменную. И уже в ней шебуршу. Но даже работая с переменной, я получаю казус с тормозами когда в глубь строки захожу. Хрен его знает, мне кажется надо сам алгоритм поиска по строке менять. Я ведь через i:=i+6 , и шагаю по строке таким образом. Наверное из-за этого.
Аноним 15/11/18 Чтв 22:40:26  1296037
>>1296019
Этому поехавшему еше в том треде указали на проеб в архитектуре и что бы юзал бд, нет же, создал новый трхед с еше большей наркоманией.
Аноним 16/11/18 Птн 03:15:53  1296109
>>1295951
>Может думаю, попотеть eще по дня и разбить всё это дело на пару десятков мелких dll ?
Это самый правильный путь, анон.
Аноним # OP  18/11/18 Вск 01:24:39  1296987
>>1295604 (OP)
Всё. Я разобрался! Код работает молниеносно.
Коротко.
Причина низкой скорости, была следующаяя. Я сканировал свою громадную 11 МБайтную строку шагом в 6 символов , циклом do while,
Чепез функцию Сopy(big_stroka,i+6, 6) <> 'iskomoe' и прибавлял 6 к i каждую итерацию.
А надо было просто с другой стороны к проблеме подойти тупо X_word:= pos('iskomoe', Big_stroka).
Всем спасибо за советы.
Аноним 19/11/18 Пнд 08:16:02  1297522
>>1296987
>X_word:= pos('iskomoe', Big_stroka)
А не может случится так, что 'iskomoe' будет начинаться в предыдущей шестерке? Или у тебя там заведомо разные форматы данных? В любом случае, я бы добавил какие-то разделители.

>>1296019
Тут вон про номера авто пишут.
Как ты будешь обрабатывать номера с меньшим кол-вом букв? Номера прицепов/спецтехники/мотоциклов?

Есть целый пласт алгоритмов "поиск подстроки", твоя ебола Сopy(big_stroka,i+6, 6) <> 'iskomoe' как раз худший случай, тем более как там будет Copy выполняться (ну т.е. выделение памяти, копирование, освобождение памяти) сотни тысяч раз - тоже вопрос интересный.
Аноним # OP  19/11/18 Пнд 10:33:33  1297559
>>1297522
> А не может случится так, что 'iskomoe' будет начинаться в предыдущей шестерке?
Да, Бывает. В моей задаче, иногда бывает лишь 2 лишь неприятных момента.
1 бывало раньше, до вчерашнего дня, до того как наконец алгоритм сменил. Когда на обработку поступил самый последний номер последнего тиража типо Х999... (но это условно, массив в норме является перемешанным, по этому последний в моём случае кажется С912УА) Ну ты понял короче.
И дальше массив заканчивался и шагнуть шестёркой некуда, из-за чего я весь цикл тянул за собой лишний if который менял i c ляма на 0.
> Или у тебя там заведомо разные форматы данных? В любом случае, я бы добавил какие-то разделители.
Нет, разделити увеличат размер файла (примерно на 1/7) и немного утяжелят логику поиска , хоть и на какие-то 0.0056 , но на фоне миллионных многопроходных поисков, мне это выльется в целые секунды.
> Как ты будешь обрабатывать номера с меньшим кол-вом букв? Номера прицепов/спецтехники/мотоциклов?
К сожалению, работу с другими шаблонами номеров я не реализовал. И камеру учил считывать лишь стандартный автомобильный номер , форматов: 77rus и 177rus
Это типо экспериментальный проект.
> Есть целый пласт алгоритмов "поиск подстроки", твоя ебола Сopy(big_stroka,i+6, 6) <> 'iskomoe' как раз худший случай
А вот как раз эти операторы работают гораздо лучше самописных способов. Типо обращений к строке как к массиву и пр. Я так изначально и делал, думал что через массивный подход поиск будет быстрее. А хот хрен там. Воспользовавшись для поиска обычным pos(a,b)=0? ,я охуел с результатов если честно.
Фишка вся в том, что большая часть всех этих встроенных стандартных функций (для строк, для математики, для звука, EoF для работы с тфайлами и пр), целиком и полностью написанны со всевозможными ассемблерными вставками в самых тяжёлых участках кода. Оттуда видимо и прирост в производительности.
Вчера утром уже приступил к разработке полного soft'a окна, меню, кнопки, настройки и пр.
Ещё вроде бы собрал до кучи все свои pas'ки с наработками для работы с полученными фото. Выбрал необходимые и самые свежие. Собрал и компильнул более менее человекоподобное приложение, которое по крайней мере само находит активные usb-камеры на портах активирует их без лишнего дрочева.
Аноним 19/11/18 Пнд 12:21:37  1297592
>>1297559
>я охуел с результатов если честно.
Сделал бы балансированное дерево - ещё бы больше охуел.

Какая у тебя там задача? Собирать базу из номеров? Причем без привязки к фотографии/ссылке, просто тупо номера, что видно на картинках?

На какой версии Delphi ты делаешь? Я на Delphi 7 (китайской сборки Delphi7 Lite) делаю ПО, только если под WinXP надо чего замутить (на заводы всякие и старые рабочие станции). А так, жопа, конечно, ни антиалиасинг, ни масштабирование, ни юникод.
Аноним # OP  19/11/18 Пнд 14:03:43  1297635
1542625392048.jpeg (3643Кб, 3264x2448)
1542625393999.jpeg (3752Кб, 3264x2448)
1542625395795.jpeg (4718Кб, 3264x2448)
1542625397766.jpeg (4732Кб, 3264x2448)
>>1297592
На 7 тоже работаю.
Вот уже некий прототип сегодня собираю
Аноним # OP  19/11/18 Пнд 14:11:45  1297643
>>1297635
(Все номера из теста - выдуманные, случайные)
Рисовал на бумаге для тестирования
Аноним 19/11/18 Пнд 21:43:02  1297851
бляшизоидкактызаебал
Аноним 20/11/18 Втр 06:52:52  1298002
image.png (170Кб, 1018x1045)
>>1297635
Оп, я пониамю, что твоя ебола худо бедно работает вопреки всему, но inc_aa, inc_bb, inc_cc называть всё таки не стоит. Подумай о тех, кто будет его через пару лет дорабатывать (это можешь быть ты сам).
Т.к. ты отступы не используешь, то крайне рекомендую всё таки поставить себе Delphi 7 Lite (например, отсюда https://rutracker.org/forum/viewtopic.php?t=3687604 ). В нём добавлены плагины расширенной подстветки синтаксиса, подстветка переменной под курсором, улучшенная автоподстановка, поиск по файлам и прочее. Мне в своё время очень помогло.
Аноним # OP  20/11/18 Втр 08:50:54  1298016
>>1298002
Ok, надо поставить. Спасибо.
Я кстати лет 5 наверное писал вообще без подсветки на этом своём гремучем Delphi 7. Тупо черным шрифтом была. Лишь недавно что-то залез в настройки и выставил подсветку синим цветом для управляющих структур. Begin and
Спасибо я попробую lite версию. У меня кажется даже есть где-то это Delphi lite.
Inc_a, inc_b, inc_c, inc_d - это функции инкремента для каждой цифры.
А 001 А А
А В С D
Поскольку строка номера должен быть полностью рандомна, я писал функции под каждый разряд. И порядок символьного ряда разумеется в каждой функции свой индивидуальный.
Тут ещё вот какое дело анончик. Я подумал и решил, что неплохо бы было взять эту систему случайных номеров на вооружение для хранения большого количества рандомных файлов. У меня есть целый столетний HDD с фотками всякими, gif ками и видюхами. Чем
Какие-то drybxf4bjuex8gij.jpg , лучше пусть будет номер.jpg кратко и лаконично. Сегодня по шурику пакетный renamer напишу. Модули у меня основные уже есть. Запас коротких имён у меня огромный 1,7 миллиарда знаков. Внукам хватит лол
Аноним # OP  20/11/18 Втр 11:37:36  1298085
1542703030945.jpeg (6607Кб, 3264x2448)
>>1298002
Установил lite. Bce ok. Но один теперь непривычный нюанс - блоки вложенных условий разноцветные. Ломаю голову как их тупо синим цветом сделать.
Аноним 21/11/18 Срд 11:24:31  1298788
>>1298085
But its colorful so cute! You are blue motherfucker!
Аноним # OP  21/11/18 Срд 12:38:00  1298850
>>1298788
No, Im not, sory dude
Аноним 21/11/18 Срд 13:57:56  1298892
>>1298788
>>1298850
Shut-up, douchebags, and don't ever try to speak english again!
Аноним 21/11/18 Срд 18:28:53  1299142
>>1295604 (OP)
> шо если всунуть в DLL очень большую программу в почти 1000000 строк?
комп взорвется
Аноним # OP  21/11/18 Срд 20:33:28  1299226
>>1298788
dld уоu еvеrуthlng sаid?
Аноним 24/11/18 Суб 08:38:42  1300409
>>1295612
Ифы не нужны, запользуй хешмапы и твоя программа станет быстрой и шелковистой

а ещё может сожрать немного оперативки
Аноним # OP  24/11/18 Суб 10:15:04  1300421
>>1300409
уже все, спасибо. Закончил наконец, вчера "бету" запускал тестировал.
Реализовал через поиск в длинной стороке. Программа слегка подвисает лишь когда запускается. Подвисает на 8 сек и это связано с анализом списков номеров, ранее сделанных фото. (т.е с анализом имён файлов изображений, имена которых в виде номера). И одновременно наполняется строка all_numbers , по мере прошерчивания рабочих директив. Далее, если и нужно будет пробить номер из архивных директорий, компьютер уже не весит, он шерстит в самой строке. И если номера нет, а присвоить нужно (ну к примеру новый фото-файл с номером добавить в базу), то добавляем в конец строки и новый номер, помимо добавления смого jpg 'а в базу разумеется.
Аноним # OP  24/11/18 Суб 10:18:11  1300422
>>1300421
Правда я накопипастил 58200 дубликатов файлов номеров, для обкатки и тестирования этого алгоритма, поэтому и 8 сек занимало. В пустых папках молниеносно как правило
Аноним 24/11/18 Суб 10:46:32  1300430
а что конкретно оп делает?
правильно понимаю что у него куча картинок машин в названии которых автомобильный номер и ему нужно просто их искать?
Аноним # OP  24/11/18 Суб 10:47:43  1300431
>>1300430
Правильно
Аноним 24/11/18 Суб 11:23:39  1300436
>>1300430
>а что конкретно оп делает?
Не хочет изучать БД
Аноним 24/11/18 Суб 11:58:40  1300447
>>1300431
тогда твою задачу можно решить небольшим скриптом на bash или powershell если ты в винде
Аноним 24/11/18 Суб 12:02:14  1300449
>>1300447
вернее, даже скрипта не нужно
в винде для папки, в которой лежит куча твоих фоток, включаешь индексацию поиска, далее задаешь поисковый паттерн прямо в проводнике
и все
будет оче быстро искать
Аноним # OP  24/11/18 Суб 12:17:25  1300452
>>1300449
>>1300447
> будет оче быстро искать
Надо ведь чтобы автоматически искалось. Поиск это промежуточный этап всего лишь, в работе программы. У меня там кода одного исходного кил на 300, на несколько модулей делил. Ручками я и в проводник могу вбить запрос )).
Задача была создать цикл автоматики. В принципе получилось, создал.
> bash или powershell если ты в вин
Ок, спасибо. Возьму на вооружение. Но их ведь вряд-ли можно интегрировать куда-либо?
Аноним 28/11/18 Срд 07:55:56  1302321
>>1300452
>У меня там кода одного исходного кил на 300
На ИФ-ах, аналогично ОП-посту?
Аноним 28/11/18 Срд 08:03:20  1302324
А
Аноним 28/11/18 Срд 08:20:47  1302328
Помогу опу-дебилу сагать собственный тред.
Аноним # OP  28/11/18 Срд 08:44:45  1302332
>>1302321
Уже всё работает. Разобрался. Прога безотказная получилась как калашников.
Аноним 28/11/18 Срд 09:08:45  1302339
>>1302332
>как калашников
рельс вдоль простреливает?


Топ тредов
Избранное