.net - 如果跨应用程序域访问类中的静态数据,会发生什么情况?

标签 .net appdomain

我有一个静态类,其中包含一些静态数据。如果从不同的应用程序域访问数据会发生什么?

  1. 每个域都会有一个静态类的副本吗?

  2. 原始类型会被复制吗?

  3. 如果数据可序列化怎么办?

最佳答案

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 from MarshalByRefObject 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/

相关文章:

没有非托管权限的 c# 无法验证的代码

.net - 为什么 UPX 不适用于 .NET 可执行文件?

c# - 使用什么来安排 .NET 应用程序每天运行?

.net - 使用.NET从JPEG删除EXIF数据的简单方法

c# - 如何强制 MSTEST TestMethod 在运行前重置所有单例/静态?

.net - .NET Core 中没有 AppDomain!为什么?

c# - 使用 MarshalByRefObject 的 [Serializable] 属性或子类化?

javascript - 从 Javascript 将参数传递给 aspx 页面的方法

c# - 在 C# 中将枚举与字符串相关联

c# - 将 Byte[] 程序集加载到新的 AppDomain