powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Что быстрее
21 сообщений из 21, страница 1 из 1
Что быстрее
    #32410366
Гость_xxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, просвятите плиз по такому вопросу :
Что быстрее работает : присвоение значение локальной переменной или
запись значения в свойсво объекта.
Код: plaintext
1.
2.
 1 ) Local luVAl
luVAl  =  ""
2 ) this.Val =""

Буду признателен.
...
Рейтинг: 0 / 0
Что быстрее
    #32410384
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фс:е дело в видимости переменной ;) а уже как быстро она запомница имхо роли не играет :))
...
Рейтинг: 0 / 0
Что быстрее
    #32410399
Гость_xxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Достопочтенный Сэр. Это для вас не играет, а для нас играет :)
Лучше бы что нить конструктивное сказали, очень надо.
...
Рейтинг: 0 / 0
Что быстрее
    #32410403
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самому лень проверить? :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CLEAR 
LOCAL i, n, x, y
x=CREATEOBJECT('custom')
x.AddProperty('y')
?'Variable:'
n=SECONDS()
FOR i= 1  TO  10000 
	y =  0 
ENDFOR
?SECONDS()-n
?'Property:'
n=SECONDS()
FOR i= 1  TO  10000 
	x.y =  0 
ENDFOR
?SECONDS()-n
RELEASE ALL 
...
Рейтинг: 0 / 0
Что быстрее
    #32410564
Присваивание свойству, естественно, медленнее, чем присваивание локальной переменной. То же относится и к вызову метода формы (медленно)или глобальной процедуры (быстро), описанной в .prg.
Что касательно последнего ответа, то если сделать:

LOCAL xxx as custom (custom - имя COM-сервера, например, Excel.Application), то
xxx = CREATEOBJECT('custom')
будет намного быстрее, так как используется раннее связывание.
...
Рейтинг: 0 / 0
Что быстрее
    #32410628
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LOCAL xxx as custom (custom - имя COM-сервера, например, Excel.Application), то
xxx = CREATEOBJECT('custom')
будет намного быстрее, так как используется раннее связывание.


Кто вам сказал что при этом используется раннее связывание?... Здесь вам не тут, то есть фокс это не VB.
...
Рейтинг: 0 / 0
Что быстрее
    #32410637
Раз Вы Всё знаете - то может, популярно просветите, для чего тогда это сделано в Fox'е (конструкция AS для ссылки на объект при объявлении переменной)? И чем это отличается от аналогичных конструкций в VB. А ещё лучше - поподробнее почитайте про полиморфизм...
А то если Microsoft не сказала, что здесь явное раннее связавание, то значит, и нет его!
Кстати, попробуйте этот код - убедитесь, что действительно быстрее...
...
Рейтинг: 0 / 0
Что быстрее
    #32410815
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз Вы Всё знаете - то может, популярно просветите, для чего тогда это сделано в Fox'е (конструкция AS для ссылки на объект при объявлении переменной)?
Для Intellisence
Кстати, попробуйте этот код - убедитесь, что действительно быстрее...
сегодня

У вас есть конкретные замеры?
Мы уже когда-то подробно обсуждали это с В.Журавлевым.
В случае с Excel нет раннего связывания даже при прямом
xxx= createobjectex("Excel.Application","","")
Может быть в VFP8 , что-то изменилось, но я очень сомневаюсь.
...
Рейтинг: 0 / 0
Что быстрее
    #32410902
Привожу код из MSDN по VB.

Dim xlApp As Object ' Declare variable to hold the reference.

Set xlApp = CreateObject("excel.application")
xlApp.Visible = True
xlApp.QuitSet xlApp = Nothing ' убираем мусор

Это позднее связывание, так как переменная xlApp объявлена как объектная, но не связана с каким-либо объектом.
В следующем примере (так же из MSDN)

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.WorkSheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)

Это раннее связывание, так как переменная xlApp связана с объектом Excel.Application при объявлении.

Было бы наивным полагать, что только ради IntelliSense Microsoft придумала все эти заморочки. Поэтому код на VFP:

LOCAL oExcel As Excel.Application
oExcel = CreateObject('Excel.Application')

использует раннее связывание. Читайте про полиморфизм...
...
Рейтинг: 0 / 0
Что быстрее
    #32410920
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Не надо булочной , не надо прачечной"
VB и VFP это совершенно разные языки.
Вы мне код на VFP приведите сравнивающий по производительности вот эти 2 варианта
Код: plaintext
1.
LOCAL oExcel As Excel.Application 
oExcel = CreateObject('Excel.Application') 

Код: plaintext
1.
LOCAL oExcel 
oExcel = CreateObject('Excel.Application') 

А тыкать носом в MSDN я и сам умею...
...
Рейтинг: 0 / 0
Что быстрее
    #32410970
А самому не придумать?
Не верите мне - задайте вопрос разработчикам из MicroSoft.
Успехов!
P.S. Типизация для переменных памяти появилась только в VFP7. Я полагаю, что форум нужен для того, чтобы сообщать друг другу о новых возможностях языка, а не для дискурсий типа "этого не может быть, потому что этого не может быть никогда!"
...
Рейтинг: 0 / 0
Что быстрее
    #32411009
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задайте вопрос разработчикам из MicroSoft
Это уже делал выше упомянутый В.Журавлев. Нет там никого раннего связывания и не надо думать, что вы умнее всех... Кстати я тогда тоже наивно верил, в то, что раннее связывание имеет место быть. Завтра постараюсь найти ссылку на этот флейм.
...
Рейтинг: 0 / 0
Что быстрее
    #32411106
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серьёзное обсуждение серьёзной проблемы.
полный респект :)
...
Рейтинг: 0 / 0
Что быстрее
    #32411262
Уважаемый CRIP! Ваше упрямство непреодолимо. Может быть, Вам стоит почитать FoxHelp, раздел Early (vtable) and Late (IDispatch) Binding for VFP8? Аналогичный раздел есть и в Help for VFP7, но там примеры только для VB. Или загляните на http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_foxhelp/html/newEarly_and_Late_Binding.asp
Там, правда, американскими буквами, написано что-то про Early binding for VFP .
Интересно, а у кого конкретно в Microsoft ваш коллега Журавлёв консультируется?
Теперь о том, что быстрее работает - про CreateObject. Вы, как специалист, вероятно, знаете, что компилируемый код (тот, который непосредственно работает с объектом после его создания) для раннего связывания сильно отличается от кода для позднего связывания. В первом случае явно используются интерфейсы (они уже известны во время компиляции), во втором - создаются ссылки типа External, которые будут реализованы только на этапе выполнения. Именно здесь и имеет место выигрыш в скорости. Поэтому Ваш вопрос не совсем корректен. Хотя в случае позднего связывания CreateObject будет работать чуть медленнее - в зависимости от размера реестра.
Недавно я закончил приложение, где, по требованию заказчика, формировалось огромное количество таблиц в Excel. Разница в скорости ощутима даже для четвёртого пенька 2,4 ггц 256 метров ОЗУ. Причём был использован именно тот синтаксис, который я указал выше (а не CreateObjectEX - по моему, это не совсем удачный пример от Microsoft. Кстати, на Ваш взгляд, нет ли ошибки в команде LOCAL для примера с поздним связыванием в Help'е?).
...
Рейтинг: 0 / 0
Что быстрее
    #32411318
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Вячеслав Клепинин

> для чего тогда это сделано в Fox'е (конструкция AS для ссылки на объект при объявлении переменной)?

ИМХО, (не помню, где я это видел) но проверка типа происходит только в COM-серверах. Во-всяком случае, теперь свойства и методы отобращаюся в VB Object Viewer с правильными типами.

CripМожет быть в VFP8 , что-то изменилось, но я очень сомневаюсь.
Делее по ссылкам:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fox7help/html/newEarly_and_Late_Binding.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_foxhelp/html/newEarly_and_Late_Binding.asp

В хелпе для vfp7 этой фразы нет:
In Visual FoxPro, you would use the CREATEOBJECT() function rather than the CREATEOBJECTEX() function.

Хотя эта фраза есть в обоих вариантах:
CREATEOBJECTEX( ) supports creation of new early-bound objects. However, it is also possible that your Visual FoxPro component is passed an object that you want to call via early-binding. You can use the GETINTERFACE( ) support on existing COM objects.

Кстати, на Ваш взгляд, нет ли ошибки в команде LOCAL для примера с поздним связыванием в Help'е?).

На мой взгляд нет
Код: 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.
45.
46.
47.
48.
49.
50.
CLEAR 
LOCAL i, n
***
LOCAL x as excel.application
n=SECONDS()
x=CREATEOBJECT('excel.application')
?SECONDS()-n
n=SECONDS()
FOR i= 1  TO  10000 
	x.Caption='xxx'
ENDFOR 
?SECONDS()-n
x.Quit 
RELEASE x
***
LOCAL x as excel.application
n=SECONDS()
x=CREATEOBJECTEX('excel.application','','')
?SECONDS()-n
n=SECONDS()
FOR i= 1  TO  10000 
	x.Caption='xxx'
ENDFOR 
?SECONDS()-n
x.Quit 
RELEASE x
*** 
LOCAL x 
LOCAL i, n
n=SECONDS()
x=CREATEOBJECT('excel.application')
?SECONDS()-n
n=SECONDS()
FOR i= 1  TO  10000 
	x.Caption='xxx'
ENDFOR 
?SECONDS()-n
x.Quit 
RELEASE x
*** 
LOCAL x 
n=SECONDS()
x=CREATEOBJECTEX('excel.application','','')
?SECONDS()-n
n=SECONDS()
FOR i= 1  TO  10000 
	x.Caption='xxx'
ENDFOR 
?SECONDS()-n
x.Quit 
RELEASE x 


CREATEOBJECTEX работает быстрее, примерно на 1/4, но этот никак не зависит от AS TYPE.
...
Рейтинг: 0 / 0
Что быстрее
    #32411492
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2NNN
Вообще-то CreateObjectEx() вообще нормально не работает...
Попробуйте этот код...
Код: plaintext
1.
2.
3.
4.
PUBLIC goE as Excel.Application
goE = CREATEOBJECTEX( "Excel.Application" , ""," ")
goE.Workbooks.Add()
goE.Visible = .T.
goE.Cells( 1 , 1 ).Value =  1 
...
Рейтинг: 0 / 0
Что быстрее
    #32411534
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Клепинин
Здесь было обсуждение
...
Рейтинг: 0 / 0
Что быстрее
    #32411637
Да, действительно, при создании Excel через CreteObjectEX непосредственное обращение к ячейке не работает, требуется использовать ActiveSheet, что резко тормозит. Можно сделать:

LOCAL xl as excel.application, xs as excel.application.activesheet
xl = CreateObjectEX('excel.application','','')
xl.WorkBooks.add()
xs = xl.ActiveSheet && !!!!

тогда

xs.Cells(x,y).value = 1 - работает, и скорость резко возрастает, но не превышает скорости, если объект создан через CreateObject().
Я протестировал пример от NNN, заменив присваивание значения свойству записью в Cells(i,1), где i - переменная цикла. В общем, при использовании AS при объявлении переменной и CreateObject, и CreateObjectEX дают примерно одинаковый результат (при использовании выше приведённого кода с дополнительной xs). Так же в среднем это работает на 15% быстрее, чем без AS, но, как Вы понимаете, это не совсем удачный тест, так как XP пытается делать оптимизацию.
Возможно, WiRuc и прав (насчёт библиотек). В принципе, раннее связывание лучше использовать для собственных COM-серверов, тогда это даст существенный выигрыш. Хотя повторюсь - в реальном приложении, где Excel используется по полной программе, выигпыш (по крайней мере для VFP8) есть. Но могут возникнуть проблемы при переносе на другие машины, где установлена другая версия Excel. Поэтому в данном случае лучше пользоваться поздним связыванием.
...
Рейтинг: 0 / 0
Что быстрее
    #32411909
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не утверждаю, что VFP не может использовать раннее связывание как таковое. Но в случае с Excel его определенно не происходит.
Как заметил Журавлев есть только некоторый выигрыш в производительности
при LOCAL x as "excel.application" , так как при этом изменяется работа с библиотекой типов.
...
Рейтинг: 0 / 0
Что быстрее
    #32412002
to CRIP:
Последняя фраза - это уже выше моего понимания.
А Ваш В.Журавлёв - это у которого сайт FoxPro Club?
Сходил, посмотрел...
...
Рейтинг: 0 / 0
Что быстрее
    #32417821
rst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Гость_xxx:
по сути без разницы :)
тут лучше следить за логикой и читабельностью кода...

2all: excel просто видимо хитрый вещь -
для всех остальных(нормальных обектов) лучше наверно делать объявление переменной..

2Crip: по приведенной ссылке , кроме того что boba[M] что-то спросл у програмистов MS (хорошо бы еще указал все таки что именно спросил и какой был ответ ) ничего не понятно...
{это не личный наезд }
Я не вижу причин по которым dual интерфейс _Application в случае excelя должен обрабатываться как-то по другому чем остальные...
(Неужели fox проверяет guid интерфейса и в случае _Application действует по отличному пути)?
Либо остается предположить что раннее связывание вообще не используется в фоксе??
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Что быстрее
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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