Страница: 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
 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
 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
 Alex3

ICQ: 9481061 
Вопросов: 18
Ответов: 132
      
 Профиль |  | #3
       
Добавлено:  26.02.03 15:30
       
    
       
  
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа: SeMa
 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
 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
 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
 Alex3

ICQ: 9481061 
Вопросов: 18
Ответов: 132
      
 Профиль |  | #12
       
Добавлено:  28.02.03 17:20
       
    
       
  
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 13 
      
Автор ответа: Страшный Сон
 Страшный Сон









Вопросов: 46
Ответов: 848
      
 Профиль |  | #13
       
Добавлено:  28.02.03 18:01
       
    
       
  
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 14 
      
Автор ответа: Alex3
 Alex3

ICQ: 9481061 
Вопросов: 18
Ответов: 132
      
 Профиль |  | #14
       
Добавлено:  28.02.03 22:06
       
    
       
  
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 15 
      
Автор ответа: Иван
 Иван







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