Visual Basic 6.0 - очередной глупый вопрос про классы...
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: Максим Кнышов <knyshow [@] mail.dsip.net>
Привет Sergey!
SM> Это простейший вид сабклассинга, множественные экземпляры формы не поддерживаются.
Пасиба, работает прекрасно! Подходит.
Топик можно ЗАКРЫТЬ!
--
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Максим Кнышов [ knyshow#mail.dsip.net ] [ http://gbu.dvostok.com ]
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Последняя версия программы Golden BackUp ( http://gbu.dvostok.com ) - 0.0.188 Beta 9
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
* Origin: КПКП "Транс Агентство" (2:5020/400)
Re[4]: Упаковка в ZIP и CAB
From: Максим Кнышов <knyshow [@] mail.dsip.net>
Привет Nikolay!
NV> Используй компонент XceedZip c www.xceedsoft.com . Он умеет делать с ZIPом
NV> практически все. Кряк найдешь в Инете.
Интересный набор компонентов, но кряка в нете я не нашел...
И еще вопрос, если с тачки-на тачку гонять по одной ихней библиотеке - на каждой машине
нужно будет регистрировать библиотеку?
--
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Максим Кнышов [ knyshow#mail.dsip.net ] [ http://gbu.dvostok.com ]
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Последняя версия программы Golden BackUp ( http://gbu.dvostok.com ) - 0.0.188 Beta 9
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
* Origin: КПКП "Транс Агентство" (2:5020/400)
Re[3]: Упаковка в ZIP и CAB
From: Максим Кнышов <knyshow [@] mail.dsip.net>
Привет Максим!
МК> Эту библиотеку я когда-то видел... Классная вешь.
Дима, свяжись со мной, плиз. Аська: 7737308
--
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Максим Кнышов [ knyshow#mail.dsip.net ] [ http://gbu.dvostok.com ]
•>ўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўўў<•
Последняя версия программы Golden BackUp ( http://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
"Кто ищет, тот всегда найдет".
http://www.vbrussian.com/Controls.asp?ID=92
Hа том же сайте лежит библиотечка Андрея Федорова, которая позволяет заюзать
для упаковки консольные версии Zip и Rar:
http://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.
МК> Вот сабклассинг - мое слабоеместо. семпл есть?
http://vbsdown.aic.ru/vb/ocx/msghook.zip
Всего хорошего!
Дмитрий Козырев aka Master
* Origin: Дорогу осилит идущий. (2:5023/11.148)