Tag: marshalbyrefobject

垃圾收集对象跨越AppDomain边界

当您将从MarshalByRefObjectinheritance的对象传递给另一个AppDomain时,由创建它的AppDomain引发的GC.Collect()不会收集该对象,前提是该对象在GC.Collect时间内未在任一AppDomain中生根( )叫? [当我说没有根源时,我的意思是没有开发人员编写代码可以访问它。] 似乎对象没有被收集,而是被提升到下一代! 但是,如果我停止将对象传递给diff AppDomain,它将按预期收集。 这种行为是设计的吗? 如果是这样理由? 多谢你们, PS我知道代码中的GC.Collect()有很多原因,我只是想了解GC将如何发生在MBRO上。

透明代理到原始类型

我有一个类型为{System.Runtime.Remoting.Proxies .__ TransparentProxy}的运行时对象,它是从inheritance自ContextBoundObject的类实例创建的。 这个类将事件引发到其他一些对象,我需要将此代理对象转换为原始对象。 所有对象都在单个系统上的默认AppDomain中。 public abstract class ObjectBase : ContextBoundObject, IObjectBase { } public IMessageSink GetObjectSink(MarshalByRefObject o, IMessageSink next) { _context = (ObjectBase)o;// as ObjectBase; does not give any error but type remains /// transparent proxy in VS watch window. // no property to get the underlying type of the proxy return _aspect; } […]

如何在AppDomains中将引用作为方法参数传递?

我一直在尝试使用以下代码(所有内容都在同一个程序集中定义): namespace SomeApp{ public class A : MarshalByRefObject { public byte[] GetSomeData() { // } } public class B : MarshalByRefObject { private A remoteObj; public void SetA(A remoteObj) { this.remoteObj = remoteObj; } } public class C { A someA = new A(); public void Init() { AppDomain domain = AppDomain.CreateDomain(“ChildDomain”); string currentAssemblyPath = […]

如何在一个好的但多重inheritance的截肢语言如C#中解决“Must be MarshalByRefObject”?

如何在一个好的但多重inheritance的截肢语言如C#中解决“Must be MarshalByRefObject”? 问题非常简单,在某些情况下,您只需inheritance此类(基础结构要求)。 这在哪种情况下并不重要。 那么,如果您已经从其他类(您的域模型要求)inheritance了,您会怎么做? 顺便说一句好的应用程序框架,就像spring.net一样,无论你需要在什么类型的基础架构中应用你的类,都要确保你不必inheritance这个类。 我想知道我在这里得到什么-3票? 🙂

In和Out属性如何在.NET中运行?

我一直在尝试使用以下代码跨AppDomain边界序列化数组: public int Read(byte[] buffer, int offset, int count) { return base.Read(buffer, offset, count); } 作为猜测,在注意到其他地方的属性后,我用[In]和[Out]属性标记了方法的参数,这似乎导致参数的行为就好像它们是通过引用传递的一样。 例如: public int Read([In, Out] byte[] buffer, int offset, int count) { return base.Read(buffer, offset, count); } 在添加属性之前,从方法跨AppDomain边界返回后, buffer变量的内容丢失了。 类( SslStream )inheritance自MarshalByRefObject但未标记为Serializable属性。 这是使参数按值传递的唯一方法吗? 在序列化类时,这些属性是否被.NET以某种方式识别? 它们真的会导致参数通过引用传递,还是只是复制了内容?