powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Отличие функций с $ и без
22 сообщений из 47, страница 2 из 2
Отличие функций с $ и без
    #32509313
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок - будем изучать пулемет.
-)
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509322
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Neue- зачем это нужно
скорость работы функций с $ на порядок выше, чем без него. В P-коде ситуация еще хуже.
Neue- как это поимать (преобразование из Variant в String)?
способ представления Variant в String разный. (об этом уже писали)

Пример:
Dim p1 As String
Dim p2 As String
p1 = "test"

p2 = Left(p1, 2)
соответствует следующим вызовам: rtcLeftCharVar; __vbaStrVarMove; __vbaStrMove; __vbaStrMove; vbaFreeVar

p2 = Left$(p1, 2)
соответствует: rtcLeftCharBstr; __vbaStrMove;

Почувствовали разницу?
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509344
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ P-коде ситуация еще хуже
конкретно для строковых функций я бы с этим не согласился - как раз режим интерпретации p-кода практически полностью нивелирует разницу
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509361
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычные преобразования Variant'а в String хоть и жрут ресурс, но немного.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Function test()
    Dim i As Long
    Dim varSource As Variant
    varSource = CVar("1234")
    Dim strSource As String
    strSource = "1234"
    
    Dim strDest As String
    
    Dim t As Single
    
    t = Timer
    For i =  1  To  10000000 
        strDest = varSource
    Next i
    Debug.Print Timer - t

    t = Timer
    For i =  1  To  10000000 
        strDest = strSource
    Next i
    Debug.Print Timer - t
End Function
Результат выполнения - 2.785156 и 2.542969
Почувствуйте разницу

Вызовы функций - разница чуть побольшеъ
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Public Function test()
    Dim i As Long
    Dim varSource As Variant
    varSource = CVar("1234")
    Dim strSource As String
    strSource = "1234"
    
    Dim strDest As String
    Dim varDest As Variant
    
    Dim t As Single
    
    t = Timer
    For i =  1  To  10000000 
        varDest = left(varSource,  1 )
    Next i
    Debug.Print Timer - t

    t = Timer
    For i =  1  To  10000000 
        strDest = left$(strSource,  1 )
    Next i
    Debug.Print Timer - t
End Function
Результат 4.957031 и 2.925781
Так что " на порядок " - это слишком
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509386
(c)\/IG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мои результаты:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dim ch
Dim sch As String
Dim i As Long
Dim Start_t As Single
Start_t = Timer
For i =  0  To  1000000 
    sch = Mid$("test",  1 ,  1 )
Next i
Debug.Print "String", Timer - Start_t
Start_t = Timer
For i =  0  To  1000000 
    ch = Mid("test",  1 ,  1 )
Next i
Debug.Print "variant", Timer - Start_t

Код: plaintext
1.
String         . 6835938  
variant         1 . 5 
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509394
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот тут подумал...
Для того, чтобы получить выигрыш в одну секунду на использовании Left$ вместо Left - пришлось обработать 10 миллионов строк.
Я ведь эта... с базами данных работаю... Если мне придется VBA-шным кодом обработать 10 миллионов записей - о проблемах быстродействия Left и Left$ я буду думать в последнюю очередь

2 VIG
У тебя для варианта с Variant'ом лишнее преобразование вкралось - строка в Variant пакуется.
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509438
(c)\/IG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
O.K
вот "более жизненный" вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim sch As String
Dim i As Long
Dim Start_t As Single
Start_t = Timer
For i =  0  To  1000000 
    sch = Mid$("test",  1 ,  1 )
Next i
Debug.Print "String", Timer - Start_t
Start_t = Timer
For i =  0  To  1000000 
    sch = Mid("test",  1 ,  1 )
Next i
Debug.Print "variant", Timer - Start_t
Код: plaintext
1.
String         . 6796875  
variant         1 . 503906  

> о проблемах быстродействия Left и Left$ я буду думать в последнюю очередь
Да уж ,живем в такое время ,что проще купить новый компьютер ,чем ломать голову над оптимизацией кода (:
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509460
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 VIG
вот "более жизненный" вариант
Твой "более жизненный" вариант на самом деле еще менее корректен. Там уже два лишних преобразования - сначала строка "test" преобразуется в Variant, а потом полученный из Mid'а Variant преобразуется в строку.

Да уж ,живем в такое время ,что проще купить новый компьютер ,чем ломать голову над оптимизацией кода (:
Это пример ненужной оптимизации, над которой не надо ломать голову. Выигрыша на задачах БД просто не заметишь. Ты же не библиотеку обработки регулярных выражений пишешь?
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509514
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
после того, как разродился участием в "непечатных символах", решил пооптимизировать Гетсев dhTranslate
вариант1 получился такой - замена & на оператор MID (главное улучшение > 1.5 раз) И заменой InStr на InStrB (еще процентов 20) (не помню, знал ли раньше, но вперился в голову этот тип мне не так давно)
получилось от 1.5 до 3.5 раз лучше по сравнению с исходным на двух наборах

дальше, следуя своим ожиданиям, высказанным в "непечатных символах", преписал вариант1, заменив строковые функции на обработку массивов интов. В том числе, заменив InStrB на вложенный цикл линейного поиска по строке заменяемых символов. С ИЗУМЛЕНИЕМ обнаружил, что этот вариант в 18 раз хуже варианта1.

Тут же перенес в VB и сделал 2 компиляции - одна - native, другая - p-code.
Так вот при p-code вариант2 в 12 раз хуже варианта1
При native вариант2 ВДВОЕ ЛУЧШЕ варианта1

СИЛЬНО призадумался - чуть было не решился поменять линейный поиск на двоичный с предварительной сортировкой ShellSort-ом. И преобразованием всего хозяйства в класс.
Потом понял - что в среднем потребуются несколько тысяч вызовов, чтобы опрадать предварительную сортировку. Плюнул и остановился на вариант1

вот такая оптимизация.

ЗЫ
(приводить ли код и какой или ну его?)
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509576
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Лох Позорный
согласен, что "на порядок" - это слишком, максимальный выигрыш только в два раза. На порядок, это если сравнивать Variant c числовыми типами. (сам не тестировал - так в книжке сказано).
А с $ или без него - это действительно мелочи, если работаешь с таким монстром, как Access. Равно как спорить насколько быстрее побежит черапаха, если ей на красовках шнурки погладить. Да не побежит она!!!
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509579
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ЛП
"более жизненный" он потому, что четко показывает разницу между Mid$ и Mid,
прочих равных условиях.
>Выигрыша на задачах БД просто не заметишь
Да я не спорю.Так ,пофилософствовать захотелось
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509612
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 marvan

про черепаху, пожалуй слишком
по моим замерам скорость исполнения VB p-кода опережает исполнение
VBA-кода Access-ом в среднем НЕ БОЛЕЕ чем в два раза.
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509625
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Victosha
Дык и VB - тоже черепаха, если говорим о массовых операциях над строками, или о сложной математике.
Насчет строк - ну есть такой маленький интерпретатор, Perl называется. Он регулярные выражения щелкает с такой скоростью, что программисты на ассемблере стоят в сторонке и нервно курят. Так что по сравнению с Perl'ом - все черепахи. Только я на Perl'е не стану рисовать кнопочки/формочки
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509642
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Victosha
про черепаху

речь не о VB p-коде и VBA-коде Access, а о быстродействии Access, как базы данных.
Написал раз экспертную систему, которая в качестве БД использовала Access. Для принятия решения многократно перелопачивалась база объёмом в гигабайт.
Код был оптимизирован "под самое не балуйся". Операция на идентификацию строки выполнялась минуту. Чуть медленнее, чем это делает оператор, да и не всегда точно. С тех пор злой я на Access, по тихоньку перехожу на собственные форматы хранения данных.

С $ или без него - а повиснеш на запросе и ...
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509675
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про Perl

если всерьез - то с выражениями (регулярными) надо с УМОМ и РАССТАНОВКОЙ - в кривых руках считать будет - мало не покажется.
Скорость обработки нелинейно зависит от сложности выражения. Так что в простых случаях - самолет. В сложных - я даже комментировать не буду. Проще переформулировать задачу.


Сам не сравнивал, но не ожидаю катастрофичекой победы по скорости перла над RegExp в Видновом скрипт-движке. (Гибгость и общая мощность - другое дело)

ЗЫ
Еще раз про p-code
Год или два назад наткнулся на статейку не помню какого мериканского или канадского университету, датированную то ли семьдесят последним то ли восемьдесят ранним годом. Так там автор обосновывал мысль о том, что по мере развития процессорных технологий скорость исполнения p-кода под управлением правильно написанного скриптового движка НЕИЗБЕЖНО ОПЕРЕДИТ скорость исполнения native-приложений, по крайней мере на определенном круге задач.
Идея заключается в чтом, что при достаточном количестве процессорного кеша сам исполнитель, будучи в него загруженным, и загружая p-code фактически как данные для себя, никогда не вызовет инвалидации процессорного кэша. Для native-приложения это практически нереально.

Надо только, чтобы p-код был самодостаточным и не вызывал обращения к "внешнему операционному миру" непосредственно.

К сожалению, исполнитель p-кода VB/VBA ПО АРХИТЕКТУРЕ не является движком такого типа. (Ближе всего, на мой взгляд, к этой схеме Java)
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509682
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>злой я на Access, по тихоньку перехожу на собственные форматы хранения данных
Предлагаю до кучи отказатся от операционной системы.
Тормозит она настоящий полет мысли :))
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509695
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Предлагаю до кучи отказатся от операционной системы
Мысль не новая ,но интересная
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509712
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 marvan
Для принятия решения многократно перелопачивалась база объёмом в гигабайт.
А че так хиленько-то? Че, на терабайт не насобирали экспертных данных что-ли?
Не перестаю удивляться людской глупости. На основе настольной (для тупых повторяю - настольной ) СУБД строить гигабайтные экспертные системы... это да...
Этак можно крутейший спортивный мотоцикл черепахой обозвать. Потому что он ну очччень медленно везет двадцатитонный прицеп. И ломается при этом часто.

А про собственные форматы - ну да... Советую в "Сравнение СУБД" заглянуть, там есть интересные топики по этому поводу

2 Victosha
Так там автор обосновывал мысль о том, что по мере развития процессорных технологий скорость исполнения p-кода под управлением правильно написанного скриптового движка НЕИЗБЕЖНО ОПЕРЕДИТ скорость исполнения native-приложений, по крайней мере на определенном круге задач.
Рихтер в своей книжке про дотнет говорит то же самое. Правда мотивирует этот тезис немного по-другому. Навскидку помню пример с JIT-оптимизацией исполняемого кода под текущий процессор со всеми его чудесными MMX-ами, SSE-шками, 3DNow и прочей великолепной лабудой.

А инвалидация процессорного кеша - это тоже аргумент... Надо будет обдумать на досуге. Хотя... ну не будет происходить инвалидации исполняемого кода (рантайм библиотек), зато постоянно не будет хватать места под данные (собственно P-Code)
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509721
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторне будет хватать места под данные (собственно P-Code)

а сколько кэша уже сейчас в Intel P4 Extreme Edition?
а каков размер p-кода "среднего" VB-приложения? (ответ - малого десятки, среднего сотни килобайт)
КАК раз именно, один раз ЦЕЛИКОМ загрузившись в кеш p-код и не будет вызывать инвалидации. А наличие типизации в синтаксисе такого скрипт-языка - БОЛЬШОЙ тоому помошник.
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509740
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а каков размер p-кода "среднего" VB-приложения? (ответ - малого десятки, среднего сотни килобайт)
эгегегегей
у меня с десяток мегабайт аксесовского "пи-кода"

Пусть есть приложение, занимающее в пикоде сотню-другую килобайт. Ну и собственно рантайм - пару мег (цифры с потолка). Если оно влезает в кеш в таком виде - дык кто ему мешает влезать в кеш в скомпиленном в native-код exe-шнике?
Основная радость может быть достигнута при использовании одного рантайма на все процессы. А это уже дотнет какой-то (или марка сигарет/остров х.. знает где) получается
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509754
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Лох Позорный
Че, на терабайт не насобирали экспертных данных что-ли
исходных данных было 250 мегов, до гигабайта она разраслась в процессе оптимизации (когда в жертву производительности приносится обём и структура данных)

На основе настольной (для тупых повторяю - настольной) СУБД строить гигабайтные экспертные системы
Для не настольной СУБД нужен не настольный комп. Да, собственно, потому её и использовал, что она настольная.

Этак можно крутейший спортивный мотоцикл черепахой обозвать
Согласен, "Не по Сеньке шапка" оказалась. Речь идёт о том, что оптимизация VB кода бесполезна если на работу с БД уходит много "машинных ресурсов"
...
Рейтинг: 0 / 0
Отличие функций с $ и без
    #32509758
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторкто ему мешает влезать в кеш в скомпиленном в native-код

тип в этом месте заключается в том, что различают кэш делится на кэш для кода и кэш для данных.

Программу, в смысле кода исполнения, действительно, можно и уже сейчас, целиком разместить в процессорном кэше.
Проблема с найтив-кодом, заключается в том, что как отдельные команды процессора, так и определенные их последовательности могут вызывать принудительную инвалидацию кэша данных, заставляя перезагружать данные из памяти. Это определяется, в том числе (и может быть в первую очередь) расположением адресов переменных в приложении ("выравниванием блока данных").

В скриптовых языках этого (перезагрузки из памяти данных) часто (не всегда) можно избежать. Утверждается, что при достаточно эффективном исполнителе, за счет резкого сокращения количества чтений/повторных чтений из памяти p-код имеет шанс обогнать native.
По мне - так звучит правдоподобно.

ЗЫ
по поводу медленно на акцессе. Если организовывать перебор с возвратом, я хотел бы понять - на чем будет "нормально", не медленно.
Акцесс, имхо, не причем.
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Отличие функций с $ и без
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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