我有一个静态类,它有一些静态数据.如果数据从不同的应用域访问,会发生什么?
每个域都会有一个静态类的副本吗?
原始类型会被复制吗?
如果数据可序列化怎么办?
AppDomain之间的内存不共享.默认情况下,对象是深度克隆,如果它们是MarshalByRef,那么它类似于通过AppDomain执行调用的远程处理,因此它看起来是共享状态.
MarshalByRefObject是通过使用代理交换消息跨应用程序域边界进行通信的对象的基类.不继承的对象MarshalByRefObject按值隐式编组.当远程应用程序引用按值对象编组时,对象的副本将跨应用程序域边界传递.
我不相信您实际上可以使用AppDomain方法调用静态成员,最好的办法是将静态调用包装在实例类中,并用于DoCallback在另一个域中执行该代码并在MarshalByRef对象中收集状态.
请参阅MSDN上的示例
一般来说,您将拥有每个应用程序域的数据副本和单独的初始化。
如果这是一个具体问题,您可能想分享一个您正在做的事情的示例。有些编组方案会复制数据。
| 归档时间: |
|
| 查看次数: |
1928 次 |
| 最近记录: |