阅读app.config贵吗?

naw*_*fal 28 c# performance coding-style 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*ter 19

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

这是一些阅读:

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

MSDN:"这些方法(注:客户机应用程序:ConfigurationManager.GetSection)提供访问缓存的配置值当前应用程序,它具有比配置类更好的表现."

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


Ode*_*ded 6

任何以磁盘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;
}
Run Code Online (Sandbox Code Playgroud)

假设它存在于具有应用程序生命周期的类中,那么现在已将内存中的配置缓存到应用程序的生命周期中.

  • @ Sam1-示例给出. (2认同)