Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Быстрый поиск в массиве Добавлено: 26.02.03 08:58  

Автор вопроса:  SeMa | ICQ: 166433794 

как мне найти в масиве байт последовательность байт, но быстрым способом, мой метод маленька тормозащий

For l = 0 To FileSize - Len(SearchText)
If exitsrch = True Then GoTo ExSrch

Searched = True
For l1 = 0 To 3 ''Len(SearchText)
If Chr(FileArr(l + l1)) <> Mid(SearchText, l1 + 1, 1) Then Searched = False
Next l1

If Searched = True Then
Images(SRpic) = l
SRpic = SRpic + 1
End If

DoEvents
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

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)
   If Chr(FileArr(l + l1)) <> Mid(SearchText, l1 + 1, 1) Then 

     Searched = False

  End If
Next l1

Напиши

For l1 = 0 To 3 ''Len(SearchText)
   If StrComp(Chr(FileArr(l + l1)) , Mid(SearchText, l1 + 1, 1), vbBinaryCompare)<>0 Then 

     Searched = False

Exit For

  End If
Next l1

Ответить

Номер ответа: 3
Автор ответа:
 Alex3



ICQ: 9481061 

Вопросов: 18
Ответов: 132
 Профиль | | #3 Добавлено: 26.02.03 15:30

Откуда такая уверенность, что GOTO самая тормозящая вещь во всех ЯВУ? По моему это одна из самых быстрых команд!

Ответить

Номер ответа: 4
Автор ответа:
 SeMa



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
Автор ответа:
 Alex3



ICQ: 9481061 

Вопросов: 18
Ответов: 132
 Профиль | | #7 Добавлено: 27.02.03 14:34

После компиляции VB код превращает в машинный. А процессору совершенно по фигу каким там ЯВУ является VB. Goto компилится в одну машинную команду плюс адрес.

В качестве демонстрации:

Создаем две кнопочки, добавляем код, КОПИЛИРУЕМ.

Обладатели медленных машин могут убрать нолики, если надо.

Private Sub Command1_Click()
Dim i As Long, t As Double
t = Timer
mBegin:

i = i + 1
If i < 1000000000 Then GoTo mBegin
MsgBox Timer - t
End Sub

Private Sub Command2_Click()
Dim i As Long, t As Double
t = Timer
For i = 0 To 1000000000

Next i
MsgBox Timer - t
End Sub

Пустой цикл с GoTo почти на 40% быстрее (на P4). А приводить примеры для языков, код которых нельзя откомпилить в машинный ИМХО не правильно.

З.Ы. А излишнее использование GoTo не рекомендуется, по крайней мере для программистов, а не для носорогов, потому что код становится прохо структурированных и плохо читаемый.

Ответить

Номер ответа: 8
Автор ответа:
 Воронков Василий



Вопросов: 1
Ответов: 90
 Профиль | | #8 Добавлено: 27.02.03 14:42

2 Alex3:

Интересно. Если верить вашему посту, то получается, что все равно какой компайлер используется - скорость все равно одна? 

зы. пузырьковый for/next штука тоже не особо скоростная

 

Ответить

Номер ответа: 9
Автор ответа:
 Alex3



ICQ: 9481061 

Вопросов: 18
Ответов: 132
 Профиль | | #9 Добавлено: 27.02.03 15:52

То Страшный Сон

Во-первых, я не агитирую за использование GoTo, я лишь опроверг мнение, что он "знач. медленнее".

Во-вторых , как интересно такой профи как ты обработку ошибок делает, не нарушая принципа "Никакой профессиональный программист никогда не поставит в своей проге слово GoTo"?

Ну, а в третьих, из-за отсутствия в VB Continue (кстати, в VB.Net случайно не добавили?) использование GoTo бывает очень даже полезно (н только мое мнение).

 

To Воронков Василий

Естественно, что в зависимости от компилятора скорость может отличаться. Откуда такой вывод сделан. К тому же мы говорим про 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:

Насчёт обработки ошибок: если в Advanced Optimizations установить флажки, никакой GoTo уже не поможет. Я ошибки не обрабатываю, а ПРЕДОТВРАЩАЮ.

Ответить

Номер ответа: 12
Автор ответа:
 Alex3



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
Автор ответа:
 Alex3



ICQ: 9481061 

Вопросов: 18
Ответов: 132
 Профиль | | #14 Добавлено: 28.02.03 22:06

Удаление занятого файла, не дискеты в дисководе, не подключен сетевой диск, ошибки доступа, соединения, unknown errors и много чего другого.

 

Вообще глупо отрицать необходимость обработчика ошибок, а он в VB реализуется только с помощью goto.

Ответить

Номер ответа: 15
Автор ответа:
 Иван



Администратор

ICQ: 147688925 

Вопросов: 24
Ответов: 708
 Web-сайт: www.vbnet.ru
 Профиль | | #15
Добавлено: 28.02.03 22:49
Однозначно GoTo нужен! Однако единственная вещь, где я стал бы его применять, так это обработка ошибок.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам