GAC是存储在内存区域还是硬盘区域?

5

GAC是内存区域还是硬盘区域(C:\windows\Microsoft.NET\Assembly\...)?我被GAC中的缓存一词所困惑。

7个回答

8

GAC是一个文件夹:

C:\Windows\Microsoft.NET\assembly

存储在该文件夹下的文件夹中的程序集位于GAC中。您可以通过对程序集进行签名,然后使用gacutil将它们添加到GAC中。GAC是托管程序集将寻找任何外部引用的位置之一。


它的后备存储是一个文件夹,但你不想手动操作它。如果你想了解GAC的工作原理,可以参考Jeffrey Richter的CLR via C#一书,其中有一个相当不错的概述。 - Funroll Loops

2

GAC本身位于硬盘上的%systemroot%\Assembly

显然,这些二进制文件在运行时会被加载到内存中。

GAC中的缓存语义上是指二进制文件的通用存储库。


“Cache”指的是具有透明加载机制的缓存,以隐藏(因此从法语“cacher”中得名)客户端对数据的昂贵加载,就像它没有被缓存一样。与二进制文件无关。 - Konrad Rudolph
2
@Konrad - “GAG中的缓存”使得它很明显是关于这个特定情况,而不是关于“缓存”一词的一般含义的陈述。 - Daniel Earwicker
字典中的前几个定义是:“藏身之处”,“囤积”,“储存”。这非常适合GAC行为。 - Hans Passant

2
一个缓存是任何能够在客户端不需要采取进一步操作的情况下提高加载数据响应时间的机制:客户端以“正常”的方式请求数据,缓存基本上拦截这些请求,并有时会在无需将请求转发给实际数据提供者的情况下提供数据。
这并不特定于基于内存。缓存存在于各种场景中,例如在CPU上以提高访问RAM的速度,在Web浏览器中以提高访问Web资源的速度 - 在这种情况下,它作为预编译程序集的文件夹存在于磁盘上,以提高访问DLL的速度(否则必须进行编译)。

1

GAC 存储在您的硬盘上。您可以使用以下命令行查看物理文件:

dir %WINDIR%\assembly\GAC_32

0

如前所述,GAC 是硬盘上的位置(%systemroot%/assembly)。在这个上下文中,“缓存”一词指的是货物的储存,因此这是一个常见的位置,强命名版本化的程序集被存储并被 .NET 应用程序访问。


0

全局程序集缓存 (GAC) 位于硬盘上,其默认路径为 C:\Windows\Assembly。我在验证后还发现您可能还有一些库位于 C:\Windows\Microsoft.NET\GAC_[XX],其中 [XX] 表示32位、64位或 MSIL(Microsoft 中间语言),假设您的系统驱动器是 C:。

您可以跟随所引用的链接以获取更多信息。


0

GAC已经在磁盘上了。想象一下将所有签名程序集都保存在内存中...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接