Техническая поддержка :

Современные решения

для защиты Windows программ

и восстановления исходного кода

Обсуждение программирования на Visual Basic в конференции ru.visual.basic


Re: очередной глупый вопрос про классы...

Мы где-то виделись, A.?

15 Feb 04 15:23:52 в RU.VISUAL.BASIC A. Skrobov -> мне:

DK>> Ты прав, свойства действительно медленнее паблик-переменных; по моим
DK>> оценкам, раза в три. Hо ты же знаешь, любая программа является
DK>> компромиссом между удобством и производительностью.
AS> Давай тестовый проект, посмотрим.

Сравнивались скорости обращения к переменным и свойствам для раннего (As
Class2) и для позднего (As Object и As Variant) связывания.

Итак, создайте Standard Exe Project1 с модулем:

============================== Смотри ниже ===============================
Option Explicit

Private Declare Function QueryPerformanceCounter Lib "kernel32" _
(lpPerformanceCount As Currency) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" _
(lpFrequency As Currency) As Long

Sub Main()
Const n = 1024
Dim i&, r&, j&, o$

Dim av(1 To n) As Variant
Dim ad(1 To n) As Object
Dim ai(1 To n) As Class2

Dim s [@] , e [@] , f [@]
QueryPerformanceFrequency f

For i = 1 To n
Set ai(i) = New Class2
Set ad(i) = ai(i)
Set av(i) = ai(i)
Next i

QueryPerformanceCounter s
For i = 1 To n
With ai(i)
For j = 1 To 256
r = .A + .B + .C
Next j
End With
Next i
QueryPerformanceCounter e
o = o & "Interface, variable: " & vbTab & Format$((e - s) / f, "0.000") &
vbCrLf

QueryPerformanceCounter s
For i = 1 To n
With ai(i)
For j = 1 To 256
r = .PropertyA + .PropertyB + .PropertyC
Next j
End With
Next i
QueryPerformanceCounter e
o = o & "Interface, property: " & vbTab & Format$((e - s) / f, "0.000") &
vbCrLf & vbCrLf

QueryPerformanceCounter s
For i = 1 To n
With ad(i)
For j = 1 To 256
r = .A + .B + .C
Next j
End With
Next i
QueryPerformanceCounter e
o = o & "IDispatch, variable: " & vbTab & Format$((e - s) / f, "0.000") &
vbCrLf

QueryPerformanceCounter s
For i = 1 To n
With ad(i)
For j = 1 To 256
r = .PropertyA + .PropertyB + .PropertyC
Next j
End With
Next i
QueryPerformanceCounter e
o = o & "IDispatch, property: " & vbTab & Format$((e - s) / f, "0.000") &
vbCrLf & vbCrLf

QueryPerformanceCounter s
For i = 1 To n
With av(i)
For j = 1 To 256
r = .A + .B + .C
Next j
End With
Next i
QueryPerformanceCounter e
o = o & "Variant, variable: " & vbTab & Format$((e - s) / f, "0.000") &
vbCrLf

QueryPerformanceCounter s
For i = 1 To n
With av(i)
For j = 1 To 256
r = .PropertyA + .PropertyB + .PropertyC
Next j
End With
Next i
QueryPerformanceCounter e
o = o & "Variant, property: " & vbTab & Format$((e - s) / f, "0.000")

MsgBox o
Open App.Path & "\results.txt" For Output As 1
Print #1, o
Close #1
End Sub
============================== Смотри выше ===============================

Потом добавьте проект ActiveX Dll Project2 с классом Class2:

============================== Смотри ниже ===============================
Option Explicit

Public A As Long
Public B As Long
Public C As Long

Private mA As Long
Private mB As Long
Private mC As Long

Public Property Get PropertyA() As Long
PropertyA = mA
End Property

Public Property Let PropertyA(ByVal v As Long)
mA = v
End Property

Public Property Get PropertyB() As Long
PropertyB = mB
End Property

Public Property Let PropertyB(ByVal v As Long)
mB = v
End Property

Public Property Get PropertyC() As Long
PropertyC = mC
End Property

Public Property Let PropertyC(ByVal v As Long)
mC = v
End Property
============================== Смотри выше ===============================

Добавьте Project2 в референсы первого проекта.

Итак, результаты получились следующими:

Запуск из IDE:

Interface, variable: 0,326
Interface, property: 1,534

IDispatch, variable: 29,501
IDispatch, property: 20,848

Variant, variable: 29,703
Variant, property: 21,250

Запуск откомпилированных проектов:

Interface, variable: 0,087
Interface, property: 0,284

IDispatch, variable: 31,395
IDispatch, property: 21,427

Variant, variable: 31,546
Variant, property: 21,530

Забавно, что в случае позднего связывания свойства оказались быстрее
переменных.

Вывод: можно смело использовать свойства вместо переменных - потеря в
производительности будет очень незначительная.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)


Re: очередной глупый вопрос про классы...

Мы где-то виделись, A.?

15 Feb 04 18:56:25 в RU.VISUAL.BASIC A. Skrobov -> мне:

DK>>>> FYI, в COM есть возможность определить запись в vTable не как адрес
DK>>>> процедуры, а как адрес переменной. Какой из этих способов использует VB
DK>>>> - не проверял, но мне кажется, что второй.
AS>>> Первый, для совместимости с disp-only интерфейсами. Могу процитировать
AS>>> Аппельмана в доказательство.
DK>> Hе надо, я тебе верю. А ты не разбирался с этими методами? Hасколько они
DK>> короткие?
AS> Стал разбираться - и действительно, процедуры не генерируются! Я в
AS> растерянности.

Точно не генерируются? Я заюзал TypeLib Information - так он и на свойства,
и на переменные говорит одно и то же, мол, свойства это, самые настоящие. :)

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)


Re[4]: Райт-клик на текстовом поле

From: Максим Кнышов

Привет Sergey!

SM> Это простейший вид сабклассинга, множественные экземпляры формы не поддерживаются.
Пасиба, работает прекрасно! Подходит.

Топик можно ЗАКРЫТЬ!

--
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Максим Кнышов [ knyshow#mail.dsip.net ] [ gbu.dvostok.com ]
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Последняя версия программы Golden BackUp ( gbu.dvostok.com ) - 0.0.188 Beta 9
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•













* Origin: КПКП "Транс Агентство" (2:5020/400)


Re[4]: Упаковка в ZIP и CAB

From: Максим Кнышов

Привет Nikolay!

NV> Используй компонент XceedZip c www.xceedsoft.com . Он умеет делать с ZIPом
NV> практически все. Кряк найдешь в Инете.
Интересный набор компонентов, но кряка в нете я не нашел...

И еще вопрос, если с тачки-на тачку гонять по одной ихней библиотеке - на каждой машине
нужно будет регистрировать библиотеку?


--
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Максим Кнышов [ knyshow#mail.dsip.net ] [ gbu.dvostok.com ]
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Последняя версия программы Golden BackUp ( gbu.dvostok.com ) - 0.0.188 Beta 9
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•













* Origin: КПКП "Транс Агентство" (2:5020/400)


Re[3]: Упаковка в ZIP и CAB

From: Максим Кнышов

Привет Максим!

МК> Эту библиотеку я когда-то видел... Классная вешь.

Дима, свяжись со мной, плиз. Аська: 7737308

--
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Максим Кнышов [ knyshow#mail.dsip.net ] [ gbu.dvostok.com ]
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Последняя версия программы Golden BackUp ( gbu.dvostok.com ) - 0.0.188 Beta 9
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•













* Origin: КПКП "Транс Агентство" (2:5020/400)


Re: Запись в таблицу Excel

Hello Максим.

17 Фев 04 19:11, you wrote to Всем:
МК> Есть пустой экселевский файл. Как из ВБ в него писать данные???
МК> Hужно просто постоянно добавлять данные в один файл.

Э-э-э... А в чём, собственно, пpоблем?

Создаёшь из пpогpаммы функцией CreateObject экземпляp Эксела, откpываешь сам файл и пpи помощи объекта Range (или Cells, по желанию) пишешь и пишешь и пишешь...

Ещё можно добавить функцию опpеделения заполненности диапазонов, et cetera.

Ivan

* Origin: Ухэр татац харвах бабах...(с)"Правда Илбэча" (2:5023/19.9)


Re: .res или imagelist?

Мы где-то виделись, Максим?

17 Feb 04 21:11:29 в RU.VISUAL.BASIC Максим Кнышов -> бЯЕЛ:

МК> У меня в программе используется на данный момент более 50 разных иконок.
МК> Возник вопрос:Что лучше использовать для хранения этих иконок (файл
МК> ресурсов или ImageList):
МК> - С точки зрения экономии оперативной памяти?
МК> - С точки зрения скорости загрузки этих иконок?
МК> - С точки зрения удобства работы (я с ресурсами еще никогда не работал)?

Именно иконок? Тогда в ресурсах, потому что ImageList, afaik, хранит картинки
как битмапы с одним замещаемым цветом. То есть с прозрачностью могут быть
проблемы.

Также многое зависит от того, что ты потом с ними делаешь: если используешь в
ListView или ToolBar, то тут, наоборот, следует выбрать ImageList - хотя бы
потому, что эти элементы управления ниоткуда больше картинки брать не могут.
:)

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)


Re: Копировать в проводника - вставить в лист-боксе

Мы где-то виделись, Максим?

17 Feb 04 21:07:23 в RU.VISUAL.BASIC Максим Кнышов -> Dmitriy:

DK>> Можно. Hо через API. :) В рантайме эхотага это не реализовано.
МК> 1. Hе сочти полным ламером, но объясни пож смысл словосочетания "в
МК> рантайме эхотага"

Я имел в виду, что в самом VB такой функции (обертки над соответствующими
апишками) нет.

МК> 2. Семпла с использованием этих самых апишек нету?

Увы, сам не разбирался, но где-то такой пример видел. Может, попробуешь
выкурить MSDN и сам написать? Там не должно быть очень сложно.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)


Re: Упаковка в ZIP и CAB

Мы где-то виделись, Максим?

17 Feb 04 21:08:56 в RU.VISUAL.BASIC Максим Кнышов -> Dmitriy:

DK>> Моя библиотечка для Cab лежит на www.vbrussian.com.
МК> Кидани прямую ссылку плиз, а то на этом сайте если ищещь что-то конкретное
МК> то хрен найдешь, в отличие от vbnet или vb.kiev

"Кто ищет, тот всегда найдет".

www.vbrussian.com/Controls.asp?ID=92

Hа том же сайте лежит библиотечка Андрея Федорова, которая позволяет заюзать
для упаковки консольные версии Zip и Rar:

www.vbrussian.com/Controls.asp?ID=16

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)


Re: Райт-клик на текстовом поле

Мы где-то виделись, Максим?

18 Feb 04 09:18:24 в RU.VISUAL.BASIC Максим Кнышов -> Sergey:

SM>> В общем случае задача решается сабклассингом текстбокса с ловлей
SM>> WM_CONTEXTMENU и "глотанием" его, т.е. для этого сообщения следует сразу
SM>> завершать обработчик, не вызывая CallWindowProc.
МК> Вот сабклассинг - мое слабоеместо. семпл есть?

vbsdown.aic.ru/vb/ocx/msghook.zip

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)



Назад Содержание Вперед