VB-script client и out-of-proc сервер - проблемы маршалинга
От: sap2 Россия  
Дата: 12.07.04 15:20
Оценка:
Привет всем!

Есть out-of-proc сервер, все интерфейсы дуальные. Есть VB-скрипт клиент, он вызывает допустим 100000 раз typename(object). При этом сервер очень хорошо загружается, хотя ни один метод object не вызывается, а вызывается GetTypeInfo в реализации IDispatch.
Почему
Re: VB-script client и out-of-proc сервер - проблемы маршали
От: dimzon Россия http://dimzon541.narod.ru
Дата: 12.07.04 15:28
Оценка:
Здравствуйте, sap2, Вы писали:

S>Привет всем!


S>Есть out-of-proc сервер, все интерфейсы дуальные. Есть VB-скрипт клиент, он вызывает допустим 100000 раз typename(object). При этом сервер очень хорошо загружается, хотя ни один метод object не вызывается, а вызывается GetTypeInfo в реализации IDispatch.

S>Почему

Так ведь GetTypeInfo в данноv случае это такой-же метод out-of-proc объекта как и прочие
Re[2]: VB-script client и out-of-proc сервер - проблемы марш
От: sap2 Россия  
Дата: 12.07.04 15:34
Оценка:
Здравствуйте, dimzon, Вы писали:

D>Здравствуйте, sap2, Вы писали:


S>>Привет всем!


S>>Есть out-of-proc сервер, все интерфейсы дуальные. Есть VB-скрипт клиент, он вызывает допустим 100000 раз typename(object). При этом сервер очень хорошо загружается, хотя ни один метод object не вызывается, а вызывается GetTypeInfo в реализации IDispatch.

S>>Почему

D>Так ведь GetTypeInfo в данноv случае это такой-же метод out-of-proc объекта как и прочие


Замечательно, но тогда получается, что в случае вызова одного метода из скрипта вызываются несколько методов IDispatch, как же в этом случае работает typelib-маршалинг, производительность страдает.
Re[3]: VB-script client и out-of-proc сервер - проблемы марш
От: rus blood Россия  
Дата: 12.07.04 16:00
Оценка:
Здравствуйте, sap2, Вы писали:

S>Замечательно, но тогда получается, что в случае вызова одного метода из скрипта вызываются несколько методов IDispatch, как же в этом случае работает typelib-маршалинг, производительность страдает.


Какой еще typelib маршаллинг в VBS ?
Имею скафандр — готов путешествовать!
Re[4]: VB-script client и out-of-proc сервер - проблемы марш
От: sap2 Россия  
Дата: 12.07.04 16:05
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Здравствуйте, sap2, Вы писали:


S>>Замечательно, но тогда получается, что в случае вызова одного метода из скрипта вызываются несколько методов IDispatch, как же в этом случае работает typelib-маршалинг, производительность страдает.


RB>Какой еще typelib маршаллинг в VBS ?


А какой там используется маршалинг? И как соптимизировать межпроцесные вызовы?
Re[5]: VB-script client и out-of-proc сервер - проблемы марш
От: rus blood Россия  
Дата: 12.07.04 16:16
Оценка:
Здравствуйте, sap2, Вы писали:

S>А какой там используется маршалинг? И как соптимизировать межпроцесные вызовы?


Никак. IDispatch и только.
Оптимизируй количество вызовов.
Имею скафандр — готов путешествовать!
Re[6]: VB-script client и out-of-proc сервер - проблемы марш
От: sap2 Россия  
Дата: 12.07.04 16:21
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Здравствуйте, sap2, Вы писали:


S>>А какой там используется маршалинг? И как соптимизировать межпроцесные вызовы?


RB>Никак. IDispatch и только.

RB>Оптимизируй количество вызовов.

так я написал, что вызовов методов объекта object вообще нет, есть только typename( object ) в VB-скрипт, а на сервере дергается GetTypeInfo интерфейса IDispatch. А что будет если дернуть хотя бы один метод объекта object. Сколько методов дернется на сервере?
Re[7]: VB-script client и out-of-proc сервер - проблемы марш
От: rus blood Россия  
Дата: 12.07.04 16:28
Оценка:
Здравствуйте, sap2, Вы писали:

S>так я написал, что вызовов методов объекта object вообще нет, есть только typename( object ) в VB-скрипт, а на сервере дергается GetTypeInfo интерфейса IDispatch. А что будет если дернуть хотя бы один метод объекта object. Сколько методов дернется на сервере?


Я так понимаю, метод TypeName вызывает IDisatch::GetTypeInfo, и у полученного интерфейса вызывается
ITypeInfo::GetDocumentation(MEMBERID_NIL, ...);


При вызыве методов вызываются IDispatch::GetIDsOfNames и IDispatch::Invoke. Кеширования DISPID-ов не наблюдается, вроде бы...
Имею скафандр — готов путешествовать!
Re[8]: VB-script client и out-of-proc сервер - проблемы марш
От: sap2 Россия  
Дата: 12.07.04 16:31
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Здравствуйте, sap2, Вы писали:


S>>так я написал, что вызовов методов объекта object вообще нет, есть только typename( object ) в VB-скрипт, а на сервере дергается GetTypeInfo интерфейса IDispatch. А что будет если дернуть хотя бы один метод объекта object. Сколько методов дернется на сервере?


RB>Я так понимаю, метод TypeName вызывает IDisatch::GetTypeInfo, и у полученного интерфейса вызывается

RB>
RB>ITypeInfo::GetDocumentation(MEMBERID_NIL, ...);
RB>


RB>При вызыве методов вызываются IDispatch::GetIDsOfNames и IDispatch::Invoke. Кеширования DISPID-ов не наблюдается, вроде бы...


То есть получается когда клиент дергает один метод на сервере, то на сервере дергается 3 метода IDispatch::GetIDsOfNames, IDispatch::Invoke и object::method. Неужели это правильно и ничего нельзя сделать
Re[9]: VB-script client и out-of-proc сервер - проблемы марш
От: rus blood Россия  
Дата: 12.07.04 16:45
Оценка:
Здравствуйте, sap2, Вы писали:

S>То есть получается когда клиент дергает один метод на сервере, то на сервере дергается 3 метода IDispatch::GetIDsOfNames, IDispatch::Invoke и object::method. Неужели это правильно и ничего нельзя сделать


Что еще за object::method ??? Invoke — это и есть вызов метода.

Нет, в VBS только IDispatch. И упаковка параметров в variant-ы (и соответственно, распаковка на сервере).

Так устроен WSH — никакой типизации, вообще.

Оптимизируй вызовы к серверу, кешируй результаты и пр.
Имею скафандр — готов путешествовать!
Re[10]: VB-script client и out-of-proc сервер - проблемы мар
От: sap2 Россия  
Дата: 12.07.04 16:53
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Здравствуйте, sap2, Вы писали:


S>>То есть получается когда клиент дергает один метод на сервере, то на сервере дергается 3 метода IDispatch::GetIDsOfNames, IDispatch::Invoke и object::method. Неужели это правильно и ничего нельзя сделать


RB>Что еще за object::method ??? Invoke — это и есть вызов метода.


RB>Нет, в VBS только IDispatch. И упаковка параметров в variant-ы (и соответственно, распаковка на сервере).


RB>Так устроен WSH — никакой типизации, вообще.


RB>Оптимизируй вызовы к серверу, кешируй результаты и пр.


Есть out-of-proc сервер, в нем есть object, который релизует дуальный интерфейс IObject : public IDispatch, у него есть метод method. Когда из VB-клиента вызывается object.method на сервере дергаются 3 метода IDispatch::GetIDsOfNames, IDispatch::Invoke и IObject::method. Это правильно? Один вызов клиента — 3 вызова сервера.
Re[11]: VB-script client и out-of-proc сервер - проблемы мар
От: rus blood Россия  
Дата: 12.07.04 16:57
Оценка:
Здравствуйте, sap2, Вы писали:

S>Есть out-of-proc сервер, в нем есть object, который релизует дуальный интерфейс IObject : public IDispatch, у него есть метод method. Когда из VB-клиента вызывается object.method на сервере дергаются 3 метода IDispatch::GetIDsOfNames, IDispatch::Invoke и IObject::method. Это правильно? Один вызов клиента — 3 вызова сервера.


Скорее всего IObject::method вызывается из IDispatch::Invoke.

Так что через межпроцесс идет все таки два вызыва, а не три.

Проверь, плз.
Имею скафандр — готов путешествовать!
Re[12]: VB-script client и out-of-proc сервер - проблемы мар
От: sap2 Россия  
Дата: 12.07.04 17:02
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Здравствуйте, sap2, Вы писали:


S>>Есть out-of-proc сервер, в нем есть object, который релизует дуальный интерфейс IObject : public IDispatch, у него есть метод method. Когда из VB-клиента вызывается object.method на сервере дергаются 3 метода IDispatch::GetIDsOfNames, IDispatch::Invoke и IObject::method. Это правильно? Один вызов клиента — 3 вызова сервера.


RB>Скорее всего IObject::method вызывается из IDispatch::Invoke.


RB>Так что через межпроцесс идет все таки два вызыва, а не три.


RB>Проверь, плз.


Стек вызовов такой:
object::method()
OLEAUT32! 77124626()
OLEAUT32! 7713d52f()
ATL::CComTypeInfoHolder::Invoke() line 3276 + 49 bytes
ATL::IDispatchImpl<IObject,&IID_IObject,&LIBID_ObjectLib,1,0,ATL::CComTypeInfoHolder>::Invoke() line 4041
OLEAUT32! 7716603a()
00730065()


так что все-таки 3 вызова

Как0нибудь можно победить эту проблему с out-of-proc сервером и VB-клиентом?
Re[13]: VB-script client и out-of-proc сервер - проблемы мар
От: rus blood Россия  
Дата: 12.07.04 17:07
Оценка:
Здравствуйте, sap2, Вы писали:

S>Стек вызовов такой:

S>
S>object::method()
S>OLEAUT32! 77124626()
S>OLEAUT32! 7713d52f()
S>ATL::CComTypeInfoHolder::Invoke() line 3276 + 49 bytes
S>ATL::IDispatchImpl<IObject,&IID_IObject,&LIBID_ObjectLib,1,0,ATL::CComTypeInfoHolder>::Invoke() line 4041
S>OLEAUT32! 7716603a()
S>00730065()
S>


S>так что все-таки 3 вызова


Так это же внутри твоего сервера идет. Через межпроцесс это не идет.
Так работает метод Invoke — клиент дергает Invoke, а Invoke уже вызывается твои методы.

В VBS — никак не победить. В VB можно пробовать раннее связывание.
Имею скафандр — готов путешествовать!
Re[14]: VB-script client и out-of-proc сервер - проблемы мар
От: sap2 Россия  
Дата: 12.07.04 17:23
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Здравствуйте, sap2, Вы писали:


S>>Стек вызовов такой:

S>>
S>>object::method()
RB>S>OLEAUT32! 77124626()
S>>OLEAUT32! 7713d52f()
S>>ATL::CComTypeInfoHolder::Invoke() line 3276 + 49 bytes
S>>ATL::IDispatchImpl<IObject,&IID_IObject,&LIBID_ObjectLib,1,0,ATL::CComTypeInfoHolder>::Invoke() line 4041
S>>OLEAUT32! 7716603a()
S>>00730065()
S>>


S>>так что все-таки 3 вызова


RB>Так это же внутри твоего сервера идет. Через межпроцесс это не идет.

RB>Так работает метод Invoke — клиент дергает Invoke, а Invoke уже вызывается твои методы.

RB>В VBS — никак не победить. В VB можно пробовать раннее связывание.


Значит все-таки 2 вызова на метод. И никак не улучшить. Жалко
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.