.NET远程调用:MarshalByRefObject和Serializable的性能测试

本文测试远程调用以下对象时的执行速度:

  1. 无成员的MarshalByRefObject
  2. 50个属性的MarshalByRefObject
  3. 无成员的Serializable
  4. 50个属性的Serializable


场景是这样的:客户端获取服务端,把自己注册给服务端,然后服务端回调客户端,并传递上述的对象。

代码下载

https://www.box.com/s/lai03ktzdi0gzo5tlv63

https://skydrive.live.com/embed?cid=7EA5197BBA7EBC13&resid=7EA5197BBA7EBC13%21146&authkey=AL6R0X8DgUO8vSk

https://docs.google.com/open?id=0B92-FAjNvVzGX2lMUFliZkl5Qk0


输出单次时间(20次)
 首次传输用时后续传输用时服务端总用时
无属性的MBR620128
50个属性的MBR620125
空序列化对象620124
50个属性的序列化对象470117
    
不输出单次时间+release版+优化(4000次)
 一次性运行分别运行 
无属性的MBR28302794 
50个属性的MBR27622727 
空序列化对象21322203 
50个属性的序列化对象30363094 


在输出单次时间的测试中,可以发现第一次连接用时总是比较长,几乎稳定为62毫秒。可能是为了输出时间,我调用DateTime.Now的关系。

在后面的release测试中,一次性运行就是开一个服务端,开一个客户端,这个服务端一次性把四个测试全运行了。调整代码后我发现,第一次MBR测试总是比第二次慢六十几毫秒,不论第一次是无属性MBR还是50属性MBR。这说明第一次封送MBR时,可能把应用程序域里其他的MBR也处理了一下,所以慢。所以,我又分别运行了这四个测试。

结果表明,MBR无论多少个属性,传送时间都是固定的。

传送空序列化对象比无属性MBR快了约26%。序列化对象的属性增加了,序列化时间也增加了。如果序列化对象的属性数量,和序列化所需时间是正比的话,那么大约每个属性花17.82毫秒,如果一个对象有超过33个属性,可以考虑用MBR

当然了,如果后续还有方法调用,MBR可能效率就比较低了,因为计算所用的参数还要传回服务器,服务器结果还要返回客户端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值