Насколько дорого стоит использование MarshalByRefObject по сравнению с сериализацией? - PullRequest
7 голосов
/ 28 июня 2011

В моем коде веб-роли Azure у меня есть класс CustomIdentity, полученный из System.Security.Principal.IIdentity.В какой-то момент .NET runtime пытается сериализовать этот класс , и сериализация не будет работать .Пытаясь решить, что я много искал и нашел этот ответ и попытался унаследовать свой класс от MarshalByRefObject.

Теперь, когда мой CustomIdentity класс наследует отMarshalByRefObject больше нет попыток сериализации, и мой код работает.Однако я хотел бы знать о влиянии на производительность использования класса MarshalByRefObject.

Мой код работает следующим образом.Сначала запрос поступает в IIS и передается в код аутентификации, который создает экземпляр CustomIdentity и присоединяет этот экземпляр к контексту HTTP.Затем через некоторое время тот же HTTP-контекст передается обработчику ASP.NET, который обращается к этому экземпляру CustomIdentity не более одного раза.Объект CustomIdentity живет в течение запроса и затем уничтожается.

Теперь при сериализации мой CustomIdentity будет сериализован в поток, а затем десериализован из этого потока в новый объект.С MarshalByRefObject нет сериализации, но создается прокси, и доступ будет перенаправлен через RPC туда, где находится реальный объект.

Насколько дорого будет использование MarshalByRefObject в этом сценарии?Какой - MarshalByRefObject или сериализация - будет дороже?

1 Ответ

8 голосов
/ 28 июня 2011

MarshalByRefObject означает, что все вызовы (методы, свойства и т. Д.) Проксируются по проводам.Это потенциально означает, что вместо передачи данных один раз и последующего локального запуска нескольких методов и т. Д. Для передаваемых данных вы выполняете сетевой вызов каждый доступ .Например, сколько раз (за запрос) тестируется роль?или имя запрошено?Честно говоря, я не знаю, но я предполагаю, что это больше, чем 1 (все в сумме).Плюс первоначальная стоимость установки ...

Пропускная способность, вероятно, не будет значительной, но задержка очень , особенно если у вас есть распределенные узлыупомяну облачный сценарий).

Лично я бы избежал MarshalByRefObject, как чума, но до вас ...

...