Yia*_*nis 19 c# performance appdomain
我试图最小化在同一台机器上跨AppDomain进行通信的性能损失.在我的玩具示例中,A类在AppDomain 1中加载.它创建一个AppDomain 2并在那里加载一个Class 2实例(Class 2继承自MarshalByRef)获取代理.然后,Class 1重复调用代理上不返回任何值的方法.
我得到以下结果:
虽然我理解2和3之间的性能损失(序列化),但我真的不明白为什么从案例1到案例2的速度要慢100倍.据我所知,一旦创建了代理,所有后续的方法调用必须非常快,因为没有数据从一个AppDomain编组到另一个AppDomain.现在有人为什么要通过AppDomains进行通信这么慢?难道我做错了什么?
PS1.我对这个唯一的技巧是在这里:"与跨越一个AppDomain边界的成本是令人尴尬的." 我猜他指的是序列化......
PS2.我不计算AppDomain或代理创建时间(我的基准测试从第一个方法调用开始)
PS3.我在WinXP SP3机器上使用.NET 3.5.我也试过.NET 4.0 Beta 1没有显着差异.
Add*_*dys 11
如果计算每个场景中涉及的IL行,您将看到CLR在远程处理时的工作量超过100倍.直接调用只是一些操作码,但是通过远程处理,涉及多个类,真实/透明代理,安全检查,序列化,yadda yadda yadda.您需要通过设计来解决这个问题 - 通过实施改进性能没有灵丹妙药.
归档时间: |
|
查看次数: |
4695 次 |
最近记录: |