我想,以尽量减少在同一台机器上跨应用程序域通信的性能损失。 在我的玩具例如,A类是在应用程序域1.装载它创建取回一个代理一个AppDomain 2和负载有2类(类源于MarshalByRef 2个继承)的实例。 然后第1类多次呼吁没有返回值的代理的方法。
我得到如下结果:
- 没有应用程序域,这两个类是在相同的应用程序域加载和第一呼叫repetedly所述方法在所述第二(该方法没有参数):24000000方法调用/秒
- 如上所述的两个应用程序域,方法没有参数或“渗色”的字符串参数:340.000方法调用/秒
- 两个应用程序域,如上所述,一个序列化参数(两个字符串的数组):64.000方法调用/秒
虽然我明白2和3(序列化)之间的性能损失,我真的不明白,为什么我是速度较慢的情况下,从1到2的情况下的100倍 。 我的理解是,一旦代理创建所有后续的方法调用必须是非常快,因为没有数据正在整理从一个AppDomain中的其他。 现在有谁为什么跨应用程序域通信速度如此之慢? 难道我做错了什么?
PS1。 我对这个唯一的技巧是在这里 :“与跨越一个AppDomain边界的成本是令人尴尬的。” 我猜测他指的序列化...
PS2。 我不指望在AppDomain或代理创建时间(我的基准在第一个方法调用开始)
PS3。 我在WinXP中SP3机使用.net 3.5。 我也尝试过.NET 4.0 Beta 1中,没有显著差异。