2008-12-31 79 views
0

我知道当创建一个DLL并声明项目为“共享”(C#中的静态)时,它们在第一次调用时实例化,然后该对象引用作为单个引用继续存在。在包含GAC的程序集中处理共享

因此,声明共享字符串属性一旦设置可以再次调用来检索相同的值。然后,线程安全是应用程序领域的一个主要关注点。

在应用程序域之外发生了什么。如果我们将程序集放入全局应用程序缓存(GAC)中,将存在多少个实例?

例如,一个名为“MyFileName”的静态属性在GAC的.dll中。

然后我们有两个应用程序调用GAC'ed .dll。 “MyFileName”会存在多少个实例?将来自应用程序的MyFileName的更改复制到Application Two使用的值?

回答

2

该DLL在AppDomain内实例化,因此存在与AppDomain一样多的不同副本。数据不会在AppDomains之间传输。将GAC中的DLL放在一个地方让所有东西都可用,它不会改变.net的内存模型。

+0

这就是我的想法,但想100%肯定! – 2008-12-31 21:02:25