阅读app.config贵吗?

毫无疑问,我还没有受到任何阅读速度瓶颈的影响。 我想知道; 如果经常阅读app.config是一个糟糕的编程选择。 我知道数据库操作变得昂贵。

在我的情况下,我不是在阅读我自己的应用程序的app.config,而是另一个项目的 ,如下所示:

private string GetAppConfigValue(string key) { ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); fileMap.ExeConfigFilename = GetConfigFilePath(); Configuration appConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); return appConfig.AppSettings.Settings[key].Value; } 

场景:我有一个管理器类(只有一个这样的类),我必须从物理路径指定的配置文件中读取少量值(3到4), 但很多次 。 我需要几个成员变量来存储app.config文件中的值吗? 什么是最好的方法。 谢谢。

我确信默认情况下会缓存所有配置文件(web.config或app.config),因此您无需创建包含所有值的静态类,也不必担心永久访问文件。

这是一些阅读:

  • Web.Config是缓存的
  • ConfigurationManager.RefreshSection方法
  • 应用程序配置文件说明
  • ASP.NET配置概述

关于您访问​​另一个应用程序的配置文件的要求:

MSDN :“这些方法( 注意:对于客户端应用程序: ConfigurationManager.GetSection )提供对当前应用程序的缓存配置值的访问,其性能优于Configuration类。”

换句话说: 是的,当它不是你自己的应用程序的配置文件时,你应该缓存它

任何以磁盘IO结尾的东西都很昂贵(绝对是在讨论旋转媒体时)。

根据杰夫迪恩的说法,看看每个计算机工程师应该知道的数字是多少? 在Quora上看到速度上的差异。

如果要重复读取文件,则应缓存结果(特别是如果文件没有更改)。

使用默认配置时, .config文件只在应用程序启动时读取一次,结果将缓存在内存中。


更新,请求示例:

 private Configuration appConfig; private Configuration GetConfig() { if (appConfig != null) return appConfig; ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); fileMap.ExeConfigFilename = GetConfigFilePath(); appConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); return appConfig; } 

假设它存在于具有应用程序生命周期的类中,您现在已将该配置缓存在内存中以用于应用程序的生命周期。

你不是真的在这里做I / O,至少不是直接做。

假设Config系统将缓存值,并且仅在遇到性能问题时才采取措施。

在任何地方使用DIY缓存都不值得使代码混乱。

从app.config读取只是您第一次执行应用程序时。 之后,它会将此配置存储在内存中,并在需要访问时从中读取。 这就是为什么在app.config中更改不会影响当前正在运行的应用程序。

在缓存app.config中的值时,经常在multithreading场景中读取它们可能会导致严重的性能损失。 如果必须同时访问配置值,最好使用自己的缓存。 您可以从AppSettingsBase类派生自定义实现。

通常,在大多数情况下,将默认配置管理器包装到自己的实现中将是一个很好的设计决策。 它不仅可以保证您更改(客户?)配置设置名称。 但是,您还可以灵活地缓存这些值,或者从可能/变得重要的任何其他源获取它们。