元帅出血/参考/价值?

时间:2010-09-03 23:46:02

标签: c# serialization

我已经通过参考听说过元帅,按照出血和元帅的元帅。这3个有什么区别?我知道这些是在跨appdomains /序列化传输数据时使用的,但不是更多。

1 个答案:

答案 0 :(得分:39)

不同形式的编组用于描述对象在通过正常函数调用在AppDomain实例之间传递时的行为方式。 AppDomain通常被称为轻量级进程,并为托管对象提供了一个隔离的容器。这里是不同类型的快速细分

参考元帅

MarshalByRefObject派生的所有类型都将通过引用进行编组。这些对象实例不会在AppDomain个实例之间传输。它们是在特定的AppDomain中分配的,不要离开它。

MarshalByRefObject边界上传递对AppDomain的引用时,会在目标AppDomain中创建代理。此代理可用于操纵原始AppDomain中的对象,但对象本身不能直接访问。

Marshal By Value

基本上与MarshalByRefObject相反。当这些值跨越AppDomain边界传递时,它们将通过二进制序列化进行序列化,并在目标AppDomain实例中进行反序列化。结果是两个,希望是独立的价值观。每个域中一个。

Marshal By Bleed

某些类型的类型称为域中立。特别是stringType和其他反映成员。这些对象不存在于特定的AppDomain中,对它们的引用可以在它们之间自由共享。它们类似于参考编组,因为不会创建重复项,也不会创建代理。相反,直接引用在AppDomain个实例之间共享。

你应该看一下Joe Duffy关于这个主题的博客文章