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