在我的Azure web角色代码中,我有一个从System.Security.Principal.IIdentity派生的CustomIdentity类。在某些时候,.NET运行时tries to serialize that class和serialization wouldn't work。为了解决这个问题,我搜索了很多次,找到了this answer,并试图从MarshalByRefObject继承我的类。
现在,一旦我的CustomIdentity类从MarshalByRefObject继承,就不再进行序列化尝试,我的代码就可以工作了。然而,我想知道使用MarshalByRefObject类的性能影响。
我的代码是这样运行的。首先,请求到达IIS,并被传递到身份验证码,该验证码创建一个CustomIdentity实例并将该实例附加到HTTP context。一段时间后,相同的HTTP context被传递给最多访问该CustomIdentity实例一次的ASP.NET处理程序。CustomIdentity对象在请求期间存活,然后被销毁。
现在,通过序列化,我的CustomIdentity将被序列化为一个流,然后从该流反序列化为一个新的对象。对于MarshalByRefObject,没有序列化,但创建了一个代理,访问将通过RPC编组到实际对象所在的位置。
在这种情况下,使用MarshalByRefObject的成本有多高?哪一个-- MarshalByRefObject和序列化--更昂贵?
发布于 2011-06-28 16:05:23
MarshalByRefObject意味着所有调用(方法、属性等)都是通过网络代理的。这可能意味着,不是只传输一次数据,然后在传输的数据上本地运行多个方法等,而是在每次访问时都进行网络调用。例如,一个角色被测试了多少次(每个请求)?还是查询的名称?老实说,我不知道,但我猜它不止1个(总和)。加上最初的安装成本...
带宽可能不是很重要,但是延迟是非常重要的,特别是当您有分布式节点时(因为您提到了云场景)。
就我个人而言,我会像躲避瘟疫一样避开MarshalByRefObject,但这取决于你...
https://stackoverflow.com/questions/6503380
复制相似问题