Вопрос: Быстрый поиск в массиве | Добавлено: 26.02.03 08:58 |
Автор вопроса: ![]() |
как мне найти в масиве байт последовательность байт, но быстрым способом, мой метод маленька тормозащий For l = 0 To FileSize - Len(SearchText) Searched = True If Searched = True Then DoEvents |
Ответы | Всего ответов: 35 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 90 |
Профиль | Цитата | #1 | Добавлено: 26.02.03 11:05 |
Убери все Goto (это самая тормознутая дрянь во всех ЯВУ) и используй WHILE/WEND вместо ифов. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ICQ: 213777061 Вопросов: 21 Ответов: 159 |
Профиль | Цитата | #2 | Добавлено: 26.02.03 13:09 |
1) Замени FileSize - Len(SearchText) в первом For на переменную. Dim i As Integer i = FileSize - Len(SearchText) тогда For l = 0 To i 2) Вместо If Searched = True Then Пиши просто If Searched Then 3) Вместо For l1 = 0 To 3 ''Len(SearchText) Searched = False End If Напиши For l1 = 0 To 3 ''Len(SearchText) Searched = False Exit For End If |
Номер ответа: 3 Автор ответа: ![]() ![]() ICQ: 9481061 Вопросов: 18 Ответов: 132 |
Профиль | Цитата | #3 | Добавлено: 26.02.03 15:30 |
Откуда такая уверенность, что GOTO самая тормозящая вещь во всех ЯВУ? По моему это одна из самых быстрых команд! |
Номер ответа: 4 Автор ответа: ![]() ![]() ICQ: 166433794 Вопросов: 9 Ответов: 143 |
Профиль | Цитата | #4 | Добавлено: 27.02.03 00:53 |
Спасибо всем. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 90 |
Профиль | Цитата | #5 | Добавлено: 27.02.03 11:09 |
VB - структурно ориентированный ЯВУ. Goto, если кто не знает, элемент линейного программирования. Линейные команды всегда выполняются знач. медленнее. Если вас это удивляет, то вы блуждаете во тьме, и для выхода на свет могу порекомендовать книгу "QuickBasic 4.5 для носорогов" 1992 года производства. ЗЫ. Для c длиной файла лучше использовать EOF While not EOF(1) ' if opened as #1
|
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 46 Ответов: 848 |
Профиль | Цитата | #6 | Добавлено: 27.02.03 14:18 |
Совет для всех программистов на Visual Basic: В вашей программе должно быть как можно меньше GoTo, так как эта комадна предназначена в первую очередь для бестолковых. Никакой профессиональный программист никогда не поставит в своей проге слово GoTo. (какое обилие отрицаний |
Номер ответа: 7 Автор ответа: ![]() ![]() ICQ: 9481061 Вопросов: 18 Ответов: 132 |
Профиль | Цитата | #7 | Добавлено: 27.02.03 14:34 |
После компиляции VB код превращает в машинный. А процессору совершенно по фигу каким там ЯВУ является VB. Goto компилится в одну машинную команду плюс адрес. В качестве демонстрации: Создаем две кнопочки, добавляем код, КОПИЛИРУЕМ. Обладатели медленных машин могут убрать нолики, если надо. Private Sub Command1_Click() i = i + 1 Private Sub Command2_Click() Next i Пустой цикл с GoTo почти на 40% быстрее (на P4). А приводить примеры для языков, код которых нельзя откомпилить в машинный ИМХО не правильно. З.Ы. А излишнее использование GoTo не рекомендуется, по крайней мере для программистов, а не для носорогов, потому что код становится прохо структурированных и плохо читаемый. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 90 |
Профиль | Цитата | #8 | Добавлено: 27.02.03 14:42 |
2 Alex3: Интересно. Если верить вашему посту, то получается, что все равно какой компайлер используется - скорость все равно одна? зы. пузырьковый for/next штука тоже не особо скоростная
|
Номер ответа: 9 Автор ответа: ![]() ![]() ICQ: 9481061 Вопросов: 18 Ответов: 132 |
Профиль | Цитата | #9 | Добавлено: 27.02.03 15:52 |
То Страшный Сон Во-первых, я не агитирую за использование GoTo, я лишь опроверг мнение, что он "знач. медленнее". Во-вторых , как интересно такой профи как ты обработку ошибок делает, не нарушая принципа "Никакой профессиональный программист никогда не поставит в своей проге слово GoTo"? Ну, а в третьих, из-за отсутствия в VB Continue (кстати, в VB.Net случайно не добавили?) использование GoTo бывает очень даже полезно (н только мое мнение).
Естественно, что в зависимости от компилятора скорость может отличаться. Откуда такой вывод сделан. К тому же мы говорим про VB, а в QuickBasic компилятора вообще нет. |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 90 |
Профиль | Цитата | #10 | Добавлено: 27.02.03 16:45 |
2 Alex3: О QuickBasic я написал чтоб товарищи ознакомились с линейным программированием. Такая книга и вправду была, и я её читал в 1992 году - так что никого не хотел задеть. По поводу того все равно ли процессору каким ЯВУ явл. васька. Процессору далеко не все равно каким образом создается машинный код. И понятное дело, что компайлер VB не самый быстрый из известных. По поводу Goto - это общепризнанный факт. Примитивные примеры вроде того ничего в действительности не проясняют, тк на быстродействие могут влиять посторонние вещи. А если у тебя собственное мнение по данному поводу, то лучше предложи автору первого поста свой вариант по оптимизации кода |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 46 Ответов: 848 |
Профиль | Цитата | #11 | Добавлено: 28.02.03 14:43 |
Alex3: |
Номер ответа: 12 Автор ответа: ![]() ![]() ICQ: 9481061 Вопросов: 18 Ответов: 132 |
Профиль | Цитата | #12 | Добавлено: 28.02.03 17:20 |
Есть ошибки, которые нельзя предотвратить! "On Error Resume Next" Forever? |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 46 Ответов: 848 |
Профиль | Цитата | #13 | Добавлено: 28.02.03 18:01 |
Например какие? |
Номер ответа: 14 Автор ответа: ![]() ![]() ICQ: 9481061 Вопросов: 18 Ответов: 132 |
Профиль | Цитата | #14 | Добавлено: 28.02.03 22:06 |
Удаление занятого файла, не дискеты в дисководе, не подключен сетевой диск, ошибки доступа, соединения, unknown errors и много чего другого.
Вообще глупо отрицать необходимость обработчика ошибок, а он в VB реализуется только с помощью goto. |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Администратор ICQ: 147688925 Вопросов: 24 Ответов: 708 |
Web-сайт: Профиль | Цитата | #15 | Добавлено: 28.02.03 22:49 |
Однозначно GoTo нужен! Однако единственная вещь, где я стал бы его применять, так это обработка ошибок. |
|