|
|
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Нафлудили мы с Senin Viktor в топике Vinni, поэтому выношу вопрос в отдельный топик. \r \r Что лучше: мучиться с references, но получить возможность проверки синтаксиса и возможно более высокую скорость(не проверял) при раннем связывании или воспользоваться более гибким средством позднего связывания? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2003, 17:19 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Я свои 5 копеек уже вставил, см. тама Добавлю еще одну особенность, обнаруженную недавно. Возьмем на примере Excell. Все функции (мои), использующие работу с Excell-ем вынесены в отдельный модуль. Ссылка на Excell в списке ссылок последняя по приоритету. Так вот даже если на компьютере не установлен Excell приложение нормально работает, если не обращаться к функциям из модуля по работе с Excell. Но...кроме одного случая, если в свойстве какого-либо элемента формы не указана функция из модуля этой формы. ....поскольку не всем понятно объясню на примере: в модуле формы есть функция myfunc() в конструкторе на поле в событие AfterUpdate ставим =myfunc() на компьютере с установленным Excell все работает, без него не работает. если же функция myfunc() находится в глобальном модуле, то все работает вне зависимости от наличия Excell P.S. Кто там писал фак по недокументированным фичам, можно добавить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2003, 17:39 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Про недокументированные фичи писал я, но разрешаю добавлять всем. :^) Только, по-моему, этот случай - не в тему. Я-то перечислял случаи, когда есть какая-то возможность, о которой никто не знает. А тут - ну ведь и так понятно, что если какой-то ссылки не хватает, то будет то работать, то не работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2003, 17:47 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Допустим, к своей базе прикладываете DLL, в такой ситуации, я думаю, позднее связывание предпочтительнее. Программа спокойно проверяет наличие DLL, если нет, то извлекает из таблицы бинарник и записывает на диск, регистрирует библиотеку и все так чинно, благородно :-) и в MDB и в MDE. И нет воплей, что используются неизвестные функции Format, или Left etc. С такими ошибками и до проверки IsBroken можно не добраться. Да и на отсутствие файла не всегда бывает IsBroken, бывают и другие ошибки при проверке: ошибка загрузки dll и др. Вообще работа с ссылками не всегда проходит гладко. Ставишь ссылку на Office 10, а у клиента почему-то подключается 8 (видел своими глазами). Наблюдал и более неприятные глюки. Да, при программировании удобно подключить библиотеки, а потом ... Cкорость работы ниже? А не уверен. Да, время затратиться на подключение, а потом, по моему, скорости работы одинаковы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2003, 19:23 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
, при программировании удобно подключить библиотеки, а потом ... Потом заменить строку Dim XLS As New Excel.Application на Dim XLS As Object и добавить CreateObject Теперь можно спокойно снять галку и избавиться от потенциальной проблемы. ---------- Одним словом раннее связывание может и хорошо, однако глючная реализация в VBA сводит на нет ее достоинства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2003, 19:36 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Кстати, кто-нибудь знает имеются ли файлы с константами(xlCenter, xlRight ..) для ADO такой имеется, а для офиса? Сейчас я их достаю с помощью VC и директивы #import. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2003, 20:00 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
2 Incold \r > У некоторых стоит Runtime Access на голой ОС (в целях экономии на лицензиях) и они занимаются только тем, что вколачивают данные в базу, никаких Word, Excell не собираются использовать (хотя в программе заложена такая возможность (цитата из url=/topic/53752]топика Vinni) \r \r Если была бы такая задача - то да. Тем более, что (грубо говоря) отключить ссылки и поставить вместо Dim xl as Excel.Application - Dim xl as Object : set xl=GetObject(...) труда со всем не составит. Но я к своему стыду (или счастью? :) ни разу RunTime нигде не ставил, и ничего под него не творил.\r \r 2 Incold \r > Так вот даже если на компьютере не установлен Excell приложение нормально работает, если не обращаться к функциям из модуля по работе с Excell. \r \r Интересно. Жалко смоделировать не могу - Екцёль жалко :)\r Т.е. есть Акес как бы ломается частично, по модульно?\r \r 2 Саныч \r > А тут - ну ведь и так понятно, что если какой-то ссылки не хватает, то будет то работать, то не работать. \r \r Эээ нет, Саныч, не соглашусь с тобой\r Если замечание incold - есть Истина, то теперь мы (я, он, она :) обладаем знанием - где что сломается впервую очередь, если будет не верная ссылка и поэтому можно хотя бы процедуру проверки ссылок (IsBroken) вынести в модуль в котором нет кода на подверженные "слету" ссылок. \r \r \r 2 Serge Gavrilov \r Интересный механизм :) правда лишний, если использовать установщик, поддерживающий WindowsInstaler (этот гад даже ярлыки мне восстанавливал :)\r \r >С такими ошибками и до проверки IsBroken можно не добраться\r C этим согласен, но замечание incold может свести такую проблему до минимума\r >Cкорость работы ниже? А не уверен\r Тьма примеров (книги, микрософт) уверяют в обратном. Щас маленьий тестик слабаю - интересно. Ёкцел сгодиться?\r \r ==\r Извините за многословность :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2003, 22:46 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
О. Мы, конечно, обладаем знанием. Я ж с этим не спорю. Я только говорю, что это не относится к теме "Недокументированные фичи". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2003, 23:01 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Сенин Виктор писал:поэтому можно хотя бы процедуру проверки ссылок (IsBroken) вынести в модуль в котором нет кода на подверженные "слету" ссылок Ну дык ведь модули подгружаются (и компилируются) именно модулями. Сенин Виктор писал:Тьма примеров (книги, микрософт) уверяют в обратном. Щас маленьий тестик слабаю - интересно. Ёкцел сгодиться? Тьма примеров (книг и майкрософта) еще говорят, что обращение к COM-серверу в exe тормозит само по себе. Так что именно на экселе ты и получишь, что, хоть и будет медленнее, но на это можно положить ибо маршалинг все сожрет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2003, 23:05 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Может кто-нибудь придумает пример по лучше Я только такой придумал/ Результат меня огорчил Код: 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. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2003, 23:12 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
2ЛП к своему стыду не знаю значения загадочного слова "маршалинг" и поэтому мало что понял :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2003, 23:15 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Если сервер находится в dll - ты можешь работать со всеми данными всех объектов обращаясь напрямую к нужным кускам памяти, ибо находишься в том же самом адресном пространстве. И вызовы всяких методов, и обращения к пропертям происходит быстро. Если сервер находится в exe-шнике (как эксель) - адресное пространство другое. Чтобы куда-то что-то передать - данные копируются из адресного пространства одного процесса в адресное пространство другого (с помощью специальной dll). Процесс этот называется маршалингом и жрет достаточно много ресурсов. Объяснение на пальцах, знатоки - не ругайтесь Результаты твой теста именно это и показывают - накладные расходы на позднее связывание не заметны на фоне накладных расходов на маршалинг. Можно проверить на каком-нибудь сервер в dll. То же самое ado. Хотя нет, работая с ado накладные расходы на операции с базой данных (тем более если по сети) тпять таки задавят расходы на связывание. Если интересно проверить именно позднее связывание vs раннее - создать свой модуль класса, сделай в нем простейший метод, и повызывай этот метод в цикле. Сначала опиши экземпляр класса как MySuperPuperClass, а потом как Object. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2003, 23:40 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
2ЛП Спасибо за объяснения про маршалинг == Надо все-таки добить тему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2003, 09:52 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Делаем класс TestClass. В нем делаем метод TestMethod, совершенно пустой и ничего не делающий. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Результат работы Код: plaintext 1. 2. 3. 4. Так что теоретически позднее связывание медленнее. Практически же на это можно забить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2003, 10:31 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
стр.631-638 т.1 хотя там мало нового, кроме того, что уже здесь говорилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2003, 10:51 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Спасибо за тест. Да, со скоростью согласен, позднее связывание сильно проигрывает. Конечно это надо учитывать. Я также проверил скорость на вызове метода TestMethod из dll. Интересно, что при раннем связывании вызов метода класса из DLL у меня получился в три раза быстрее чем вызов метода из собственного класса. При позднем связывании вызов метода класса из DLL тоже происходит быстрее, но не так значительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2003, 11:40 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
2 Serge Gavrilov Да не проигрывает позднее связывание по скорости. Если, конечно, не рассматривать случай сферических коней в вакууме. А то что я привел - это именно сферический конь в вакууме. Пример Сенина Виктора показывает, что в случае сервера в exe (эксель) пофиг какой тип связывания. Можно погонять ado-шные объекты, поглядеть как себя ведут несферические кони в dll. По поводу "TestMethod из dll" - на чем писал? Если на VB - во что компилил, native или P-code? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2003, 12:38 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
To ЛП: VB 6, ActiveX DLL, Native code ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2003, 13:25 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Когда я был молодым и дырявил перфокарты бритвой, чтобы поменять начальные условия в счетной задаче, процесс работы с программой состоял из 3-х этапов: 1. "Трансляция" (компиляция с языка программирования-этап Compile) 2. "Редактирование" (имеется в виду редактирование связей, разрешение внешних ссылок - этап Link) 3. Собственно "Счет" - Run Насколько я понимал и сейчас понимаю эти процессы, компилятор плодит код в инструкциях ассемблера, допуская при этом наличие внешних ссылок. Редактор связей создает модуль практически в относительных адресах кроме ссылок на функции ядра ОС. После редактора связей при загрузке программа просто получает смещение в памяти и начинает выполняется. Из рассмотренного видно, что работа Link "не тормозит", если все внешние ссылки находятся в ядре ОС, т.е. как бы все время загружены в память. Соответственно, скорости "поздего" и "раннего" связывания могут быть сопоставимы только если скорость доступа по внешним ссылкам, обрабатываемым "на лету", пренебрежимо мала т.е. сопоставима со скоростью доступа к резидентным функциям ОС. Неужели эксель весь в памяти сидит? Во техника-то продвинулась... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2003, 13:29 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
2 Serge Gavrilov Если не сложно - проверь в случае компиляции в P-code. Просто интересно. Я бы и сам, да VB нихт. 2 Лифчик А ты возьми да погляди сколько того экселя в памяти На самом деле позднее связывание тормозит (см. мой тест), но это незаметно на фоне переброски данных между разными адресными пространствами, переключения контекстов и т.п. (см. тест Сенина Виктора) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2003, 13:42 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Лох: тады я согласен на 100%, что источник тормоза есть винды изначальные . Правда камни быстрые пока выручают. Но это только пока... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2003, 13:53 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Комп у меня потормознее видимо :( Процедура и класс такие же. TestBindingNativecodeDLL Раннее связывание 0,28125 Позднее связывание 10,08594 TestBindingPCodeDLL Раннее связывание 0,578125 Позднее связывание 11,54688 TestBindingOwnClass Раннее связывание 0,7539063 Позднее связывание 12,29688 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2003, 14:36 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Хм... куда уж тормознее... я и так на тысячном селероне сижу. За результаты теста сенькс. Оно примерно так и ожидалось. Хотя думал что отличие P-Code от собственного класса будет поменьше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2003, 14:53 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
У меня стабильно //тест ЛП Код: plaintext 1. 2. 3. 2Лифчик >Неужели эксель весь в памяти сидит? >Во техника-то продвинулась... А в Автозагрузке есть "C:\Program Files\Microsoft Office\Office\OSA9.EXE" ? The Office Startup Assistant (OSA9.exe or OSA9) is a program that improves the performance of Office 2000 programs ... The OSA9.exe file does the following: - Initializes Automation - Initializes some of the common fonts installed by Office 2000 - Handles certain commands (New Office Document, Find Fast, Open Office Document, Help, and Screen Saver) on the Start menu and on the Office Shortcut Bar - Displays Microsoft Outlook notifications when the Office Assistant is available ... //MSDN:OFF2000: What Is the OSA9.exe File and What Does It Do? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2003, 15:25 |
|
||
|
Позднее vs раннее связывание
|
|||
|---|---|---|---|
|
#18+
Senin Vik(c)tor: - Initializes Automation Прочитал тут пару страниц в Гетце и показалось мне, что раннее и позднее связывание различаются нюансами интерфейса. Т.е. в обоих случаях речь не идет об объектах, для которых уже память выделена (на старом языке - оттранслированный и отредактированный модуль). Так что разница в скоростях не должна быть на порядок. И тогда маршаллинг всех забьет, когда парад свой устроит Шкварчать будет машинка всеми дисками своей души и моргать всеми своими глазками- оконцами Все конечно с поправкой на ИМХО, а я есть Лифчик, известный в узких кругах ретроград ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2003, 17:11 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1735&tid=1678820]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 394ms |

| 0 / 0 |
