Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
Господа, просвятите плиз по такому вопросу : Что быстрее работает : присвоение значение локальной переменной или запись значения в свойсво объекта. Код: plaintext 1. 2. Буду признателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 13:14 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
фс:е дело в видимости переменной ;) а уже как быстро она запомница имхо роли не играет :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 13:18 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
Достопочтенный Сэр. Это для вас не играет, а для нас играет :) Лучше бы что нить конструктивное сказали, очень надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 13:27 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
Самому лень проверить? :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 13:30 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
Присваивание свойству, естественно, медленнее, чем присваивание локальной переменной. То же относится и к вызову метода формы (медленно)или глобальной процедуры (быстро), описанной в .prg. Что касательно последнего ответа, то если сделать: LOCAL xxx as custom (custom - имя COM-сервера, например, Excel.Application), то xxx = CREATEOBJECT('custom') будет намного быстрее, так как используется раннее связывание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 14:54 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
LOCAL xxx as custom (custom - имя COM-сервера, например, Excel.Application), то xxx = CREATEOBJECT('custom') будет намного быстрее, так как используется раннее связывание. Кто вам сказал что при этом используется раннее связывание?... Здесь вам не тут, то есть фокс это не VB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 15:27 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
Раз Вы Всё знаете - то может, популярно просветите, для чего тогда это сделано в Fox'е (конструкция AS для ссылки на объект при объявлении переменной)? И чем это отличается от аналогичных конструкций в VB. А ещё лучше - поподробнее почитайте про полиморфизм... А то если Microsoft не сказала, что здесь явное раннее связавание, то значит, и нет его! Кстати, попробуйте этот код - убедитесь, что действительно быстрее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 15:32 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
Раз Вы Всё знаете - то может, популярно просветите, для чего тогда это сделано в Fox'е (конструкция AS для ссылки на объект при объявлении переменной)? Для Intellisence Кстати, попробуйте этот код - убедитесь, что действительно быстрее... сегодня У вас есть конкретные замеры? Мы уже когда-то подробно обсуждали это с В.Журавлевым. В случае с Excel нет раннего связывания даже при прямом xxx= createobjectex("Excel.Application","","") Может быть в VFP8 , что-то изменилось, но я очень сомневаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 16:58 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
Привожу код из 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') использует раннее связывание. Читайте про полиморфизм... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 17:43 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
"Не надо булочной , не надо прачечной" VB и VFP это совершенно разные языки. Вы мне код на VFP приведите сравнивающий по производительности вот эти 2 варианта Код: plaintext 1. Код: plaintext 1. А тыкать носом в MSDN я и сам умею... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 17:54 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
А самому не придумать? Не верите мне - задайте вопрос разработчикам из MicroSoft. Успехов! P.S. Типизация для переменных памяти появилась только в VFP7. Я полагаю, что форум нужен для того, чтобы сообщать друг другу о новых возможностях языка, а не для дискурсий типа "этого не может быть, потому что этого не может быть никогда!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 18:39 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
задайте вопрос разработчикам из MicroSoft Это уже делал выше упомянутый В.Журавлев. Нет там никого раннего связывания и не надо думать, что вы умнее всех... Кстати я тогда тоже наивно верил, в то, что раннее связывание имеет место быть. Завтра постараюсь найти ссылку на этот флейм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 19:08 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
серьёзное обсуждение серьёзной проблемы. полный респект :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 22:08 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
Уважаемый 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'е?). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 08:57 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
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. CREATEOBJECTEX работает быстрее, примерно на 1/4, но этот никак не зависит от AS TYPE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 09:46 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
2NNN Вообще-то CreateObjectEx() вообще нормально не работает... Попробуйте этот код... Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 11:06 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
Вячеслав Клепинин Здесь было обсуждение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 11:18 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
Да, действительно, при создании 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. Поэтому в данном случае лучше пользоваться поздним связыванием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 12:13 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
Я не утверждаю, что VFP не может использовать раннее связывание как таковое. Но в случае с Excel его определенно не происходит. Как заметил Журавлев есть только некоторый выигрыш в производительности при LOCAL x as "excel.application" , так как при этом изменяется работа с библиотекой типов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 13:52 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
to CRIP: Последняя фраза - это уже выше моего понимания. А Ваш В.Журавлёв - это у которого сайт FoxPro Club? Сходил, посмотрел... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2004, 14:24 |
|
||
|
Что быстрее
|
|||
|---|---|---|---|
|
#18+
2Гость_xxx: по сути без разницы :) тут лучше следить за логикой и читабельностью кода... 2all: excel просто видимо хитрый вещь - для всех остальных(нормальных обектов) лучше наверно делать объявление переменной.. 2Crip: по приведенной ссылке , кроме того что boba[M] что-то спросл у програмистов MS (хорошо бы еще указал все таки что именно спросил и какой был ответ ) ничего не понятно... {это не личный наезд } Я не вижу причин по которым dual интерфейс _Application в случае excelя должен обрабатываться как-то по другому чем остальные... (Неужели fox проверяет guid интерфейса и в случае _Application действует по отличному пути)? Либо остается предположить что раннее связывание вообще не используется в фоксе?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2004, 18:14 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32411009&tid=1597145]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
91ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 397ms |

| 0 / 0 |
