Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / что оптимальнее replace или if-then-else? / 13 сообщений из 13, страница 1 из 1
12.01.2009, 13:50
    #35752497
M.Juanito
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что оптимальнее replace или if-then-else?
Всем привет!
Друзья, подскажите, пожалуйста, есть ли где справочник с данными по скорости работы, тех или иных операторов VB(для оптимизации кода).
в частности интересует какой код будет оптимальнее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub test()
Dim sTest As String
Dim aTest As Variant

sTest = "aaa.x.ccc"

aTest = Split(sTest, ".")

If aTest( 1 ) = "x" Then
    MsgBox "bbb"
Else
    MsgBox aTest( 1 )
End If
End Sub

или
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub test2()
Dim sTest As String
Dim aTest As Variant

sTest = "aaa.x.ccc"

aTest = Split(Replace(sTest, ".x.", ".bbb."), ".")

MsgBox aTest( 1 )
End Sub

?
...
Рейтинг: 0 / 0
12.01.2009, 14:36
    #35752652
FAndrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что оптимальнее replace или if-then-else?
Выполните свой код 100 000 раз и время засеките. И будет вам счастье.
...
Рейтинг: 0 / 0
12.01.2009, 14:38
    #35752659
M.Juanito
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что оптимальнее replace или if-then-else?
это я попробую конечно:).
а что насчет справочника какого-нибудь?
...
Рейтинг: 0 / 0
12.01.2009, 15:25
    #35752833
M.Juanito
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что оптимальнее replace или if-then-else?
хех.
получается, что второй вариант работает на 5-10% медленнее :(
эх. а так красиво смотрится.
...
Рейтинг: 0 / 0
12.01.2009, 15:29
    #35752841
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что оптимальнее replace или if-then-else?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub test2()
Dim sTest As String
Dim aTest As String

sTest = "aaa.x.ccc"

aTest = Split$(Replace$(sTest, ".x.", ".bbb."), ".")

MsgBox aTest( 1 )
End Sub

вот удивитесь ;)
...
Рейтинг: 0 / 0
12.01.2009, 15:34
    #35752859
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что оптимальнее replace или if-then-else?
...
Рейтинг: 0 / 0
12.01.2009, 15:42
    #35752888
M.Juanito
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что оптимальнее replace или if-then-else?
точно! все время забываю про $ :) спасибо
...
Рейтинг: 0 / 0
12.01.2009, 15:48
    #35752905
M.Juanito
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что оптимальнее replace или if-then-else?
Konst_One,

Split$ не прокатывает, говорит:

Type-declaration character doesn't match declared data type


но даже с одним только Replace$ второй вариант вырвался вперед
...
Рейтинг: 0 / 0
12.01.2009, 15:57
    #35752929
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что оптимальнее replace или if-then-else?
это я погорячился в попыхах =)
...
Рейтинг: 0 / 0
13.01.2009, 05:43
    #35753834
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что оптимальнее replace или if-then-else?
Можно удивиться обратно :)
Тесты сделаны так, чтобы выполнять одинаковую работу: создать массив, корректируя один его элемент
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Sub Test()
  Dim sTest$, aTest, TestNo&, t#
  Dim s$, s1$, s2$, s3$, i&, j&
  Const N =  100000 
  sTest = "aaa.x.ccc"
  s1 = ".x.": s2 = ".bbb.": s3 = "."
  Debug.Print "====" & Now
  For TestNo =  1  To  2 
    t = Timer
    Select Case TestNo
    Case  1 
      ' 1 место по скорости: 0,203 s; 492 308 op/s
      For i =  1  To N
        aTest = Split(sTest, s3)
        If aTest( 1 ) = "x" Then aTest( 1 ) = "bbb"
        s = aTest( 1 )
      Next
    Case  2 
      ' 2 место по скорости: 0,344 s; 290 909 op/s
      For i =  1  To N
        aTest = Split(Replace$(sTest, s1, s2), s3)
        s = aTest( 1 )
      Next
    End Select
    t = Timer - t: If t =  0  Then t =  0 . 01 
    Debug.Print TestNo & " " & s, Format(t, "0.000") & " s", Format(N / t, "# ##0") & " op/s"
  Next
End Sub
...
Рейтинг: 0 / 0
13.01.2009, 10:27
    #35754074
M.Juanito
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что оптимальнее replace или if-then-else?
ну да. второй вариант лучше. и мне он больше нравится:)
...
Рейтинг: 0 / 0
13.01.2009, 13:14
    #35754668
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что оптимальнее replace или if-then-else?
M.Juanitoну да. второй вариант лучше. и мне он больше нравится:)
Вопрос как будто был "по скорости работы".
2-й вариант примерно в 1.6 раза медленнее 1-го.
Но зимой 2-й вариант точно лучше, так как процессор греет больше :)
...
Рейтинг: 0 / 0
13.01.2009, 13:26
    #35754713
M.Juanito
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что оптимальнее replace или if-then-else?
а. точно. че-то я уже запутался.
спасибо :)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / что оптимальнее replace или if-then-else? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]