gpt4 book ai didi

c# - 与序列化相比,使用 MarshalByRefObject 的开销有多大?

转载 作者:太空狗 更新时间:2023-10-29 20:18:09 25 4
gpt4 key购买 nike

在我的 Azure Web 角色代码中,我有一个派生自 System.Security.Principal.IIdentityCustomIdentity 类。在某些时候 .NET 运行时 tries to serialize that classserialization wouldn't work .试图解决我搜索了很多并找到 this answer并试图从 MarshalByRefObject 继承我的类(class).

现在,一旦我的 CustomIdentity 类继承自 MarshalByRefObject,就不再有序列化尝试,我的代码就可以工作了。不过,我想知道使用 MarshalByRefObject 类对性能的影响。

我的代码是这样运行的。首先,请求到达 IIS 并传递给创建 CustomIdentity 实例并将该实例附加到 HTTP 上下文的身份验证代码。然后一段时间后,相同的 HTTP 上下文被传递给最多访问该 CustomIdentity 实例一次的 ASP.NET 处理程序。 CustomIdentity 对象在请求期间存在,然后被销毁。

现在通过序列化,我的 CustomIdentity 将被序列化为一个流,然后从该流反序列化为一个新对象。使用 MarshalByRefObject 时,没有序列化,但会创建一个代理,访问将通过 RPC 编码到实际对象所在的位置。

在这种情况下,使用 MarshalByRefObject 的开销有多大? MarshalByRefObject 或序列化哪个成本更高?

最佳答案

MarshalByRefObject 意味着所有调用(方法、属性等)都通过网络进行代理。这可能意味着您不是一次 传输数据,然后在本地对传输的数据运行多种方法等,而是每次访问 都进行网络调用。例如,一个角色被测试了多少次(每个请求)?或查询的名称?老实说,我不知道,但我猜它超过 1(总计)。加上原始设置成本...

带宽可能不会很重要,但延迟非常很重要,特别是如果您有分布式节点(因为您提到了云场景)。

就我个人而言,我会像避免瘟疫一样避免 MarshalByRefObject,但取决于您...

关于c# - 与序列化相比,使用 MarshalByRefObject 的开销有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6503380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com