7

我在 Microsoft 文档的某处读到 ASP.NET 的web.config 的内容是缓存的。如果这是真的,它在哪里缓存 - 在内存或磁盘上

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

4

7 回答 7

8

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

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

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

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

于 2008-11-08T15:56:37.687 回答
5

在 ASP.NET 中,<appSettings>部分在第一次访问后缓存到内存中:

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

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

于 2014-05-28T22:31:09.700 回答
1

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

击中这些对象不太可能给您带来性能瓶颈。但是,如果您必须进行解析等,您可能希望保留已解析的对象。

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

于 2008-11-08T14:55:42.660 回答
1

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

于 2008-11-08T14:56:16.280 回答
0

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

我的 web.config 中有大约 30 个 AppSettings 键。

例如

<appSettings>
        <add key="ProductImageFileType" value=".jpg|.jpeg|.gif|.png" />
</appSettings>

在我的 ASP.Net C# 代码中,我有

string ValidateType = ConfigurationManager.AppSettings["ProductImageFileType"].ToString();

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

在此处输入图像描述

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

于 2021-05-12T06:54:18.007 回答
-1

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

于 2010-11-05T10:41:36.513 回答
-1

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

  1. 应用缓存——基于内存限制、时间限制和其他依赖的内部对象缓存

  2. 页面输出缓存 - 在服务器上呈现页面缓存。它们都是基于内存的;不是磁盘。

于 2011-07-19T04:55:25.983 回答