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

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

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

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

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

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

Forms!frmVasya

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

должно работать примерно одинаково (быть может с точностью до неуловимого неявного преобразования)
Сам не проверял, но удивлюсь если не так. Вечером погоняю дома. Самому интересно стало.
...
Рейтинг: 0 / 0
Кто быстрей?
    #32166523
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я собственно просто так спросил чего вы набросились на тему-то :(==)
...
Рейтинг: 0 / 0
Кто быстрей?
    #32166524
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Но ведь Forms("frmVasya") ищет объект "on the fly", а Forms!frmVasya обращается к нему по имени. Разве не так?
...
Рейтинг: 0 / 0
Кто быстрей?
    #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
Кто быстрей?
    #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
Кто быстрей?
    #32167719
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И тутзаглохло...
...
Рейтинг: 0 / 0
Кто быстрей?
    #32167723
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ты ж уже написал результат - чего еще обсуждать.
А твои "чудеса" в последнем примере очень просто объясняются - ты забыл t перед началом инициализировать
...
Рейтинг: 0 / 0
Кто быстрей?
    #32167798
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо с пивом по вечерам завязывать...
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Кто быстрей?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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