ASP.NET:web.config缓存在何处/如何缓存?

ASP.NET:web.config缓存在何处/如何缓存?,asp.net,caching,web-config,Asp.net,Caching,Web Config,我在Microsoft文档中的某个地方读到ASP.NET的web.config的内容被缓存。如果这是真的,它缓存在哪里?内存中还是磁盘上 还有一个后续问题:如果我必须集中访问web.config,是否需要考虑性能问题?我认为web.config缓存在内存中(在System.web.Configuration的对象实例中)。当.config文件被更改时(从而重新加载您的web应用程序),这些文件将被重新加载 命中这些对象不太可能造成性能瓶颈。但是,如果必须进行解析等操作,则可能需要保留已解析的对象

我在Microsoft文档中的某个地方读到ASP.NET的web.config的内容被缓存。如果这是真的,它缓存在哪里?内存中还是磁盘上


还有一个后续问题:如果我必须集中访问web.config,是否需要考虑性能问题?

我认为web.config缓存在内存中(在System.web.Configuration的对象实例中)。当.config文件被更改时(从而重新加载您的web应用程序),这些文件将被重新加载

命中这些对象不太可能造成性能瓶颈。但是,如果必须进行解析等操作,则可能需要保留已解析的对象


[Extra]我认为最好的做法(至少)是在global.asax.cs文件中为您的appsettings创建静态属性。您可以在application_start方法中实例化这些属性,并在web应用程序中使用它们。这会阻止您在整个代码中使用硬编码字符串(配置键)。

它被缓存在内存中。磁盘上的缓存对于经常访问的内容没有多大意义,并且已经采用了可以将其转换为易于存储的数据结构的格式。我的建议是自由访问它,因为它将与您提出的任何存储方案一样快,而且可能更快。

它缓存在内存中,缓存在磁盘上没有任何意义,它已经在磁盘上了

首先,在ASP.NET中,您希望确保通过HttpContext对象的
GetSection
方法访问配置节(这使用ASP.NET管理的缓存副本)

访问配置值的性能取决于Section对象(GetSection返回的对象)的内部实现。
ConfigurationSection
可以简单地充当DOM节点的包装器,它可以在每次请求属性时读取该节点。另外,它还可以在内部缓存该值并监视更改


我的建议是保持代码简单,只需通过
GetSection
访问所需的值,而不是试图在其他地方保存它们的副本,但如果要从
GetSection
返回的对象中获取多个值,请务必在请求期间保持对该对象的引用。

我的建议就像其他变量一样使用它,原因很简单,数据是缓存的。如果在global.asax中创建静态变量,则会迫使自己编写更多代码。无论您的计划如何,在开发阶段都很可能频繁地在appconfig中添加变量。

ASP.NET中有两种类型的缓存

  • 应用程序缓存-基于的内部对象缓存 内存限制、时间限制和其他依赖性

  • 页面输出缓存-服务器上呈现的页面缓存。他们俩 是基于内存的;不是磁盘

  • 在ASP.NET中,部分在第一次访问后缓存到内存

    • http://msdn.microsoft.com/en-us/library/aa478432.aspx
    • http://weblogs.asp.net/stevewellens/web-config-is-cached

    如果web.config文件有更新,ASP.NET将重新启动应用程序。

    我完全不同意缓存web.config值。它不断被IIS访问

    我的web.config中有大约30个AppSettings密钥

    例如

    请参阅下图,其中显示了每秒递增的web.config读取计数


    我的建议是在应用程序启动期间从ConfigurationManager.AppSettings获取值,并将键值对存储在全局字典中。

    磁盘上的键值对可以序列化。。。好吧,好吧,我知道这很傻。我写的时候没想到…:-)等待我疯了吗?我正在查看RedGate reflector中的HttpContext.GetSection,它看起来像是在内部调用ConfigurationManager.GetSection,但它看起来并没有缓存任何内容。如果我遗漏了什么,请告诉我。@Dan:您没有指定要查看的版本,2.0.0.0确实依赖于
    ConfigurationManager
    ,但在本文中将使用
    CachedPathData
    来获取该部分。原因是可能涉及到许多
    web.config
    文件(当前路径中的每个文件夹中都有一个),要为路径显示的配置的实际状态由所有这些文件组成。@AnthonyWJones很高兴知道!我在这里找到了一个非常透彻的解释:
    <appSettings>
            <add key="ProductImageFileType" value=".jpg|.jpeg|.gif|.png" />
    </appSettings>
    
    string ValidateType = ConfigurationManager.AppSettings["ProductImageFileType"].ToString();