我在Microsoft文档中的某处读到了ASP.NET web.config的内容已缓存。如果是这样, 是否已缓存 - 在内存中或在磁盘上?
还有一个后续问题:如果我必须密集访问web.config,是否需要进行任何性能考虑?
答案 0 :(得分:8)
它缓存在内存中,缓存在磁盘上没有任何意义,它已经存在于磁盘上。
首先,在ASP.NET中,您希望确保通过HttpContext对象的GetSection
方法访问配置节(这使用ASP.NET管理的缓存副本)。
访问配置值的性能是Section对象(GetSection返回的对象)的内部实现的一个功能。 ConfigurationSection
可以简单地充当DOM节点的包装器,它可以在每次请求属性时读取。除此之外,它可以在内部缓存价值并注意变化。
我的建议是保持代码简单,只需通过GetSection
访问所需的值,而不是尝试在其他地方保存它们的副本,但一定要保持对GetSection
返回的对象的引用如果您要从中获取多个值,则在请求期间。
答案 1 :(得分:5)
在ASP.NET中,< appSettings> 部分在第一次访问后缓存到内存 :
如果有web.config文件的更新,ASP.NET将重新启动应用程序。
答案 2 :(得分:1)
我认为web.config缓存在内存中(来自System.Web.Configuration的对象实例中)。更改.config文件时会重新加载它们(从而重新加载您的Web应用程序)。
点击这些对象不太可能给你带来性能瓶颈。但是如果你必须进行解析等,你可能想要保留已解析的对象。
[Extra]我的好习惯(我认为至少)是在你的global.asax.cs文件中为你的appsettings创建静态属性。您可以在application_start方法中实例化这些属性,并在整个Web应用程序中使用它们。这可以防止您在整个代码中使用硬编码字符串(配置键)。
答案 3 :(得分:1)
它被缓存在内存中。对磁盘进行缓存对于经常访问的内容并没有多大意义,并且已经采用可以将其转换为易于存储的数据结构的格式。我的建议是自由访问它,因为它会像你提出的用于存储它的方案一样快,并且可能更快。
答案 4 :(得分: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 获取值并将键值对存储在全局字典中。
答案 5 :(得分:-1)
我的建议是使用它就像任何其他变量一样,原因很简单,数据是缓存的。如果在global.asax中创建静态变量,则强制自己编写更多代码。无论你有多计划,很有可能在开发阶段经常在appconfig中添加变量。
答案 6 :(得分:-1)
ASP .NET中有两种类型的缓存。
应用程序缓存 - 基于内部对象缓存 记忆限制,时间限制和其他依赖
页面输出缓存 - 在服务器上呈现页面缓存。他们都 是基于记忆的;不是磁盘。