【问题标题】:Is GAC a memory area or hard disk area?GAC是内存区还是硬盘区?
【发布时间】:2010-05-16 14:15:16
【问题描述】:

GAC 是内存区还是硬盘区 (C:\windows\Microsoft.NET\Assembly\...) 我对 GAC 中的缓存一词感到困惑?

【问题讨论】:

    标签: c# gac


    【解决方案1】:

    GAC 是一个文件夹:

    C:\Windows\Microsoft.NET\程序集

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

    【讨论】:

    • 它的后备存储是一个文件夹,但你不想手动弄乱它。要对 GAC 的工作方式有一个很好的概述,您可能需要查看 Jeffrey Richter 的 CLR by C# 一书。
    【解决方案2】:

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

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

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

    【讨论】:

    • 嗯。 “缓存”意味着有一个透明的加载机制来隐藏(因此名称“缓存”来自法语“cacher”)从访问数据的客户端加载数据的成本高昂,就好像它没有被缓存一样。不引用二进制文件。
    • @Konrad - “GAG 中的缓存......”很明显地说明了这个具体案例,而不是关于缓存一词的一般含义的陈述。
    • 字典中的前几个定义:“藏身处”、“囤积”、“商店”。非常适合 GAC 的行为。
    【解决方案3】:

    cache 是任何一种机制,它可以提高加载数据的响应时间,而无需客户端采取进一步的行动:客户端以“正常”方式请求数据,缓存基本上会拦截这些请求,有时可能无需将请求转发给实际的数据提供者即可交付数据。

    这绝不是特定于基于内存的。缓存存在于各种场景中,在 CPU 上以改善 RAM 的访问时间,在 Web 浏览器中以改善 Web 资源的访问时间 - 在这种情况下,作为磁盘上预编译程序集的文件夹以改善对 DLL 的访问(否则会必须编译)。

    【讨论】:

      【解决方案4】:

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

      dir %WINDIR%\assembly\GAC_32
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          Global Assembly Cache (GAC) 位于您的硬盘驱动器上,默认情况下为C:\Windows\Assembly,并且我在验证后还注意到您可能在C:\Windows\Microsoft.NET\GAC_[XX] 也有库,其中 [XX] 代表 32 位或 64 位或 MSIL( Microsoft Intermediate Language) 假设您的系统驱动器是 C:。

          您可以点击参考链接了解更多信息。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-05-03
              • 1970-01-01
              • 2020-12-02
              • 2011-10-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多