我有一个静态类,其中包含一些静态数据。如果从不同的应用程序域访问数据会发生什么?
每个域都会有一个静态类的副本吗?
原始类型会被复制吗?
如果数据可序列化怎么办?
最佳答案
AppDomain 之间的内存不共享。默认情况下,对象是深度克隆,如果它们是 MarshalByRef 那么它类似于跨 AppDomain 执行调用的远程处理,因此看起来是共享状态。
MarshalByRefObject
is the base class for objects that communicate across application domain boundaries by exchanging messages using a proxy. Objects that do not inherit fromMarshalByRefObject
are implicitly marshal by value. When a remote application references a marshal by value object, a copy of the object is passed across application domain boundaries.
我不相信您实际上可以使用 AppDomain 方法调用静态成员,您最好的选择是将静态调用包装在实例类中并使用 DoCallback
在另一个域中执行该代码并收集 MarshalByRef
对象中的状态。
请参阅 MSDN 上的示例
关于.net - 如果跨应用程序域访问类中的静态数据,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7957868/