Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Кто быстрей? / 14 сообщений из 14, страница 1 из 1
22.05.2003, 17:09
    #32166462
sasha_1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
интересно, а что работает быстрей:
1. объект!поле=значение
2. объект.поле=значение
3. объект(поле)=значение
4. объект(индекс поля)=значение
5-8. все тоже самое но с Value перед знаком =

или все равно.
...
Рейтинг: 0 / 0
22.05.2003, 17:14
    #32166465
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
Это такой отборочный тур?

1.объект(индекс поля)=значение
2.объект("имя поля")=значение
3.все остальное либо ошибка, либо одинаково
...
Рейтинг: 0 / 0
22.05.2003, 17:19
    #32166470
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
Самое быстрое - объект(индекс поля).Value=значение
Но тебе нужно 286-й машин и в цикле раз этак дохера прогнать - может тогда разницу в скорости и заметишь.
Гетц утверждает что "объект!поле" на этапе компиляции неявным образом преобразуется в "объект(поле)", и это как-то может влиять на скорость выполнения. Но в этом вопросе я Гетцу точно не верю. Компиляция все-таки один раз происходит, и такое преобразование заметить нереально.
...
Рейтинг: 0 / 0
22.05.2003, 17:20
    #32166473
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
Видимо, объект("имя поля") будет работать медленнее, потому что оно находит объект на стадии выполнения, а не компиляции.
...
Рейтинг: 0 / 0
22.05.2003, 17:32
    #32166490
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
2 Владимир Саныч
Это если "объект" есть "Me" (для формы например) то связывание на этапе компиляции. А если сделать
Код: plaintext
1.
2.
Dim f As Form
Set f = Me
Debug.Print f.SomeControl.Value

то оно откомпилируется для любого имени контрола, даже несуществующего
и работать будет еще медленнее
...
Рейтинг: 0 / 0
22.05.2003, 17:36
    #32166501
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
Понял. Но все равно что-то не так. Если я пишу

FirstPart = "frm"
SecondPart = "Vasya"
Forms(FirstPart & SecondPart)

то ведь это явно будет работать медленнее, чем

Forms!frmVasya

?
...
Рейтинг: 0 / 0
22.05.2003, 17:44
    #32166519
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
Код: plaintext
1.
Forms!frmVasya
Forms( "frmVasya" )

должно работать примерно одинаково (быть может с точностью до неуловимого неявного преобразования)
Сам не проверял, но удивлюсь если не так. Вечером погоняю дома. Самому интересно стало.
...
Рейтинг: 0 / 0
22.05.2003, 17:48
    #32166523
sasha_1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
Да я собственно просто так спросил чего вы набросились на тему-то :(==)
...
Рейтинг: 0 / 0
22.05.2003, 17:48
    #32166524
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
Но ведь Forms("frmVasya") ищет объект "on the fly", а Forms!frmVasya обращается к нему по имени. Разве не так?
...
Рейтинг: 0 / 0
22.05.2003, 18:35
    #32166570
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
    Dim t As Single, i As Long, s As String, f As Object
    
    t = Timer()
    Set f = Me!Поле0
    t = Timer()
    For i =  1  To  1000000 
        s = f.Value
    Next
    Debug.Print Timer() - t
    '4,265625

    t = Timer()
    For i = 1 To 1000000
        s = Me.Поле0.Value
    Next
    Debug.Print Timer() - t
    '22, 01563 
    
    t = Timer()
    For i =  1  To  1000000 
        s = Me.Controls( 0 ).Value
    Next
    Debug.Print Timer() - t
    '23,875

    t = Timer()
    For i = 1 To 1000000
        s = Me("Поле0")
    Next
    Debug.Print Timer() - t
    '25, 04688 
    
    t = Timer()
    For i =  1  To  1000000 
        s = Me!Поле0.Value
    Next
    Debug.Print Timer() - t
    '35,60938
    
    'А вот и чудеса!
    For i =  1  To  1000000 
        s = Me( "Поле0" ).Value
    Next
    Debug.Print Timer() - t
    ' 59 , 625 
...
Рейтинг: 0 / 0
22.05.2003, 19:34
    #32166611
Нуф-нуф
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
...и нафик оно мене... Хм... самому интересно...

1,76 +- 0,01 сек.:
For I = 0 To 10000
strVal = Me(0)
Next I
2,34 +- 0,01 сек.:
For I = 0 To 10000
strVal = Me(0).Value
Next I

1,95 +- 0,01 сек.:
For I = 0 To 10000
strVal = Me(15)
Next I
2,53 +- 0,01 сек.:
For I = 0 To 10000
strVal = Me(15).Value
Next I

???? +- 0,01 сек.
For I = 0 To 10000
strVal = Me(15+N???)
Next I

2,22 +- 0,01 сек.:
For I = 0 To 10000
strVal = Me!txtIter
Next I
2,83 +- 0,01 сек.:
For I = 0 To 10000
strVal = Me!txtIter.Value
Next I

2,24 +- 0,01 сек.:
For I = 0 To 10000
strVal = Me("txtIter")
Next I
2,94 +- 0,01 сек.:
For I = 0 To 10000
strVal = Me("txtIter").Value
Next I
...
Рейтинг: 0 / 0
23.05.2003, 20:25
    #32167719
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
И тутзаглохло...
...
Рейтинг: 0 / 0
23.05.2003, 20:32
    #32167723
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
Так ты ж уже написал результат - чего еще обсуждать.
А твои "чудеса" в последнем примере очень просто объясняются - ты забыл t перед началом инициализировать
...
Рейтинг: 0 / 0
24.05.2003, 07:00
    #32167798
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто быстрей?
Надо с пивом по вечерам завязывать...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Кто быстрей? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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