На сервере имется объект (назовем его RObj) наследник MarshalByRef. У этого объекта есть подобъект, тоже наследник MarshalByRef (назовем его RSubObj).
Cервер регистрирует RObj как синглетон с серверной активизацией. Клиент и сервер между собой общаются по TCP каналу в бинарном формате.
Так когда клиент получает RObj от клиента и вызывает у него всякие разные методы — все хорошо и быстро.
ROjb.SomeMethod() - Все работает хорошо
Но, если клиент попытается вызвать метод подобъекта RSubObj, то появляются тормоза. Клиент зависает примерно секунд на 10. Такие тормоза появляются только при первом вызове метода (для данного клиента). При последующих вызовах все ОК.
RObj.RSubObj.SomeMethod() - Тормозит секунд на 10 при первом вызове
Если RSubObj сделать Serializable, а не MarshalByRef, то все работает нормально.
Естественно, что конструкторы RObj и RSubObj ничего сложного не делают, кроме тривиальной инициализации.
Может кто знает ответ на вопрос: почему такие тормоза возникают и как эти тормоза обойти.
Здравствуйте, <Аноним>, Вы писали:
А>Если RSubObj сделать Serializable, а не MarshalByRef, то все работает нормально. А>Естественно, что конструкторы RObj и RSubObj ничего сложного не делают, кроме тривиальной инициализации.
сами себе на вопрос ответили.
Здравствуйте, dimitry_dimitry, Вы писали:
А>>Если RSubObj сделать Serializable, а не MarshalByRef, то все работает нормально. А>>Естественно, что конструкторы RObj и RSubObj ничего сложного не делают, кроме тривиальной инициализации. _>сами себе на вопрос ответили.
Между MarshalByRef и Serializable есть ощутимая разница.
Проблемы это не решает.
Здравствуйте, rockandroll, Вы писали:
R>Между MarshalByRef и Serializable есть ощутимая разница.
а кто спорит?
я таких тестов не делал, но думаю что MarshalByRef в принципе медленнее должен быть. R>Проблемы это не решает.
Здравствуйте, rockandroll, Вы писали:
R>Здравствуйте, dimitry_dimitry, Вы писали:
А>>>Если RSubObj сделать Serializable, а не MarshalByRef, то все работает нормально. А>>>Естественно, что конструкторы RObj и RSubObj ничего сложного не делают, кроме тривиальной инициализации. _>>сами себе на вопрос ответили.
R>Между MarshalByRef и Serializable есть ощутимая разница. R>Проблемы это не решает.
R>2 Аноним: А какая конфигурация компа?
Быстрая. П4 2.6 и сеть 100Мб. ОС — WinXP. MarshalByRef, к сожалению, необходим.
По крайней мере, обходить очень нежелательно
Здравствуйте, Resnick, Вы писали:
А>>>>Если RSubObj сделать Serializable, а не MarshalByRef, то все работает нормально. А>>>>Естественно, что конструкторы RObj и RSubObj ничего сложного не делают, кроме тривиальной инициализации. _>>>сами себе на вопрос ответили.
R>>2 Аноним: А какая конфигурация компа?
R>Быстрая. П4 2.6 и сеть 100Мб. ОС — WinXP. MarshalByRef, к сожалению, необходим. R>По крайней мере, обходить очень нежелательно
При создании RObj ттже тормоза?
RObj и RSubObj в одной сборке?
Что делает SomeMethod?
Есть подозоения на jit компиляцию, но 10 сек. — это много.
Может ngen прогонишь...
... << RSDN@Home 1.1.4 >>
Re: .NET Remoting и подобъекты MarshalByRef
От:
Аноним
Дата:
08.09.04 16:37
Оценка:
Здравствуйте, Аноним, Вы писали:
[skip]
Та же фигня и у меня.
Только маленькое уточнение: ето происходит при использовании TcpChannel, на HttpChannel никаких тормозов нет.