Насколько тип Variant медленней Long и String ?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Насколько тип Variant медленней Long и String ?

Сообщение jangle » 18.05.2018 (Пт) 10:08

Или разницы нет? Интересует копирование из Variant в Long и String и обратно.

Teranas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Насколько тип Variant медленней Long и String ?

Сообщение Teranas » 18.05.2018 (Пт) 13:56

Не пользуйтесь типом Variant, если не нуждаетесь в его особенных свойствах, таких например, как хранение величин типа Empty и Null. Каждая переменная Variant занимает 16 байт (против 8, занимаемых Double или Currency) и, в общем, очень тормозная.

Variant (числа)
16 байт Любое числовое значение в рамках диапазона типа данных Double

Variant (символы)
22 байта + длина строки


Можно попробовать:
Public Declare Sub RtlMoveMemory Lib "kernel32" (ByVal pDst As Long, ByVal pSrc As Long, ByVal ByteLen As Long)
С уважением, Андрей.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Насколько тип Variant медленней Long и String ?

Сообщение ger_kar » 18.05.2018 (Пт) 20:43

Ну разница точно есть. В случае со строкой, если используется переменная типа String, то для доступа к самой строке достаточно одной операции получения указателя на эту строку. В случае же использования типа Variant это дополнительные операции проверки типа и только после этого получение указателя на сам текстовый буфер плюс больше накладных расходов при инициализации переменной и в процессе её уничтожения и освобождения памяти. Сам процесс копирования текстового буфера будет одинаковым по затратам. Если буфер большой, то на фоне времени, необходимом для его копирования (включая выделение памяти), небольшое увеличение времени доступа к указателю в случае с Variant переменной будет не существенным.
Бороться и искать, найти и перепрятать


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 43

    TopList