Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

 

  Вопрос: Разгоняем CHR : Почти в 2 раза! Добавлено: 08.05.05 22:08  

Автор вопроса:  Morpheus | Web-сайт: xury.zx6.ru

Ответить

  Ответы Всего ответов: 125  

Номер ответа: 16
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #16
Добавлено: 10.05.05 09:17
Я не ляпнул, оно действительно медленней. Я вообще ни слова не говорил про Chr vs Array, я те сказал что дурной тон это именно использовать имена счетчиков. И ты не прав.

И не нарывайся на грубость, пусть оно и запрещено, но тя оскорбить - могу и не удержаться.

Ответить

Номер ответа: 17
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #17
Добавлено: 10.05.05 11:22
 Я использую Next всегда с именем счётчика. Исключительно для упорядоченности. А когда делаю проверку кода и нахожу пустой Next, то обязательно поставлю после него имя переменной.
 Отлавливать такие ошибки очень тяжело и лучше сразу же исключить возможность их появления.

Ответить

Номер ответа: 18
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #18
Добавлено: 10.05.05 11:59

Dim s As String
s = Chr(j)
s = c(j)

 Такое возможно только в VB, который автоматически преобразовывает источник в формат приёмника. Кроме того не следует забывать что функция CHR расчитана на тип Variant и к ней больше подходит объявление без явного указания типа. А то что оборачивание операций в функцию замедляет работу и так ясно. Нужно как минимум выполнить CALL и RET.

Ответить

Номер ответа: 19
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #19
Добавлено: 10.05.05 12:40
Кстати, вот такой тест не показал разницы во времени:

Private Sub Form_Load()
Dim B As Long, t1 As Double, t2 As Double

MsgBox "Start!", 48
 
 t1 = Timer
  For B = 0 To 1000000000
  Next B
 t2 = Timer
 MsgBox t2 - t1, , "Next B"

 t1 = Timer
  For B = 0 To 1000000000
  Next
 t2 = Timer
 MsgBox t2 - t1, , "Next"
End Sub

Ответить

Номер ответа: 20
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #20
Добавлено: 10.05.05 12:47
И в этом тесте оба цикла отработали с одинаковой скоростью:

Private Sub Form_Load()
Dim A As Long, B As Long, C As Long, t1 As Double, t2 As Double

MsgBox "Start!", 48
 
 t1 = Timer
  For C = 0 To 1000
   For B = 0 To 1000
    For A = 0 To 1000
    Next A
   Next B
  Next C
 t2 = Timer
 MsgBox t2 - t1, , "Next Counter"

 t1 = Timer
  For C = 0 To 1000
   For B = 0 To 1000
    For A = 0 To 1000
    Next
   Next
  Next
 t2 = Timer
 MsgBox t2 - t1, , "Next"
End Sub

Ответить

Номер ответа: 21
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #21 Добавлено: 10.05.05 13:32
sne, не надо мне угрожать грубостями.
На фоне того, что ты ошибаешься, твои угрозы выглядят как минимум смешно.
Понятно, что я тут человек новый, и тебя заклинило на том, что посмел не согласиться с лидером. Но CyRax тут вроде не новичок, может его мнение для тебя имеет больше вес? Может ты ему поверишь, что цикл с переменной и без неё работают одинаково? Раз сам не в состоянии набрать пару строк и проверить.
И всё-таки отсутствие переменной цикла - дурной стиль, и если ты его придерживаешься, то тебе надо самоучитель VB в руки и вперед, переучиваться.
Если тебе нечего сказать по теме топика, не надо засорять его и провоцировать бесконечный флуд, вынуждая меня отвечать тебе.

Ответить

Номер ответа: 22
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #22
Добавлено: 10.05.05 13:47
 Мне тоже это интересно и я был очень недоволен когда впервые услышал это утверждение. Правда тогда я поверил на слово и удосужился проверить только сейчас.
 Всё же если это так принципиально, то лучше всего сравнить генерируемые компилятором инструкции.

Ответить

Номер ответа: 23
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #23 Добавлено: 10.05.05 15:04
С переменной цикла:

Sub Main()
    Dim i As Long
    For i = 0 To 100
    Next i
End Sub


00401550   . 33C0           XOR EAX,EAX
00401552   > 83C0 01        ADD EAX,1
00401555   . 70 06          JO SHORT 1.0040155D
00401557   . 83F8 64        CMP EAX,64
0040155A   .^7E F6          JLE SHORT 1.00401552
0040155C   . C3             RETN
0040155D   > FF15 40104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaError>;  MSVBVM60.__vbaErrorOverflow


-------------------------------
Без переменной цикла:

Sub Main()
    Dim i As Long
    For i = 0 To 100
    Next
End Sub


00401550   . 33C0           XOR EAX,EAX
00401552   > 83C0 01        ADD EAX,1
00401555   . 70 06          JO SHORT 1.0040155D
00401557   . 83F8 64        CMP EAX,64
0040155A   .^7E F6          JLE SHORT 1.00401552
0040155C   . C3             RETN
0040155D   > FF15 40104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaError>;  MSVBVM60.__vbaErrorOverflow


Здесь два листинга. Один с указанием переменной, другой - без.
Может, уважаемый sne объяснит, по какой причине первый код должен исполняться медленнее второго, а?

Ответить

Номер ответа: 24
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #24
Добавлено: 10.05.05 15:25
Что то не нравится мне VB-шный пустой цикл. Хотя наверное если отключить проверку на переполнение он сгенерирует более оптимизированный код.

Ответить

Номер ответа: 25
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #25
Добавлено: 10.05.05 15:49
На фоне того, что ты ошибаешься, твои угрозы выглядят как минимум смешно.

Найди в себе силы и укажи в каком месте я ошибся?

и тебя заклинило на том, что посмел не согласиться с лидером.

Ты лучше посмотри на свой тон. И узнаешь что меня нервирует :)

Но CyRax тут вроде не новичок, может его мнение для тебя имеет больше вес?

Что его мнение, что мое, что твое равны. Но вас одно обобщает :) Вы идете спорить и обвинять недочитав фразы :)

Может ты ему поверишь, что цикл с переменной и без неё работают одинаково? Раз сам не в состоянии набрать пару строк и проверить.

Я набирал, проверял. В IDE цикл с указанным счетчиком работает медленнее, это факт! И хватит отрицать очевидное, возьми напиши пару строк и проверь!!!

Или до тебя настолько туго доходят чужие слова!?

И всё-таки отсутствие переменной цикла - дурной стиль

Нифига не дурной :) Написание счетчика - вот дурной стиль, имхо :))
А знаешь в чем разница меж нами, я указываю что высказаное мной лишь мое скромное мнение, а ты гнешь линию и не думаешь что это твое, а не общее!

Здесь два листинга. Один с указанием переменной, другой - без.
Может, уважаемый sne объяснит, по какой причине первый код должен исполняться медленнее второго, а?

Мдя... Как ты наверное понял, я прекрасно могу пользоваться (в данном случае ты юзал Olly) отладчик и дизасемблер. И первым же делом я дизассемблил код и смотрел. Я уже сто раз написал про IDE, а ты либо слеп, либо туп, прости за искренность, но выбирай одно из двух. Мне уже надоело сто раз повторять одно и то же из раза в раз.

Вот тебе пример, у тебя есть MsgBox, причем в IDE он имеет прототип:
MsgBox [owner, lpText, lpCaption, dwState]

А в откомпилированном exe:
MsgBox [owner, lpCaption, lpText, dwState]

Ты бы этого хотел!?
Тут та же ситуация, в IDE Next i работает по-другому, не так как в откомпилированном варианте. Суть надеюсь донес.

Так зачем же использовать разное, когда можно указать просто Next - и форма записи короче, и стабильность.

Ответить

Номер ответа: 26
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #26
Добавлено: 10.05.05 15:50
2CyRax
Что то не нравится мне VB-шный пустой цикл. Хотя наверное если отключить проверку на переполнение он сгенерирует более оптимизированный код.

Я отключал, все едино :)

Ответить

Номер ответа: 27
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #27 Добавлено: 10.05.05 16:17
Я уже говорил, что ссылки на IDE неуместны. Не тестируют программы на скорость в IDE. Если это для тебя откровение - остается развести руками.

Не поленился и набрал этот код. И запустил в IDE.

Private Sub cmd1_Click()
    Dim i As Long, t As Single
    t = Timer
    For i = 0 To 100000000
    Next i
    MsgBox Timer - t
End Sub

Private Sub cmd2_Click()
    Dim i As Long, t As Single
    t = Timer
    For i = 0 To 100000000
    Next
    MsgBox Timer - t
End Sub


СПЕЦИАЛЬНО ОГОВАРИВАЮ: ЗАПУСКАЛ ИЗ IDE.
ОБА СПОСОБА ПОКАЗАЛИ ОДИНАКОВЫЙ РЕЗУЛЬТАТ 1,79 сек.

Ты и теперь будешь отрицать? Может ты хотя бы в этот раз объяснишь, почему одинаковый результат, не сбиваясь на угрозы и сотрясание воздуха кулаками?

Знаешь приятель, ты не удосужился даже проверить свои слова. Это называется пустозвонство.
Какие ещё можешь придумать причины или условия для оправдания своей некомпетентности?
Жду следующих нападок :)

Ответить

Номер ответа: 28
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #28 Добавлено: 10.05.05 16:21
Знаешь чем я отличаюсь от тебя? Тем что могу признать свои ошибки. Ты же не можешь найти в себе силы сделать этого.
Слабак :)

Ответить

Номер ответа: 29
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #29
Добавлено: 10.05.05 16:30
 Нет, ну вообще то скорость работы в IDE важна. Она важна для VBA, т.к. они (VB6 IDE и VBA) используют один и тот же движок.
 Остаётся только проверить действительно ли в IDE другой код для данного случая. Самый простой способ проверки - получить адрес процедуры с тестовым кодом с помощью AddressOf и считать оттуда память в файл (тут зависит от прав доступа: либо CopyMemory либо ReadProcessMemory). Потом скармливаешь этот код дизассемблеру (например WDASM) и получаешь код цикла.

Ответить

Номер ответа: 30
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #30
Добавлено: 10.05.05 17:13

Знаешь чем я отличаюсь от тебя? Тем что могу признать свои ошибки. Ты же не можешь найти в себе силы сделать этого.
Слабак :)

 Об этой его слабости всем известно. Ты не открыл америку :).

Ответить

Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

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



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