更改windows服务的配置文件(app.config)必须重启服务才能生效吗?

简介:

这个问题是前一阶段写windows服务碰到的。本来在写获取配置文件的某个配置的值的时候,通常我都是写类似下面的这么一个静态方法来获取:

   1:          /// <summary>
   2:          /// 获取每次处理记录数
   3:          /// </summary>
   4:          /// <returns></returns>
   5:          private static int GetRecordCount()
   6:          {
   7:              int recordCount = 10000;
   8:              try
   9:              {
  10:                  recordCount = Math.Abs(int.Parse(ConfigurationManager.AppSettings["RecordCount"]));
  11:                  if (recordCount==0)
  12:                  {
  13:                      recordCount = 10000;
  14:                  }
  15:              }
  16:              catch 
  17:              {
  18:                  recordCount = 10000;
  19:              }
  20:              return recordCount;
  21:          }

RecordCount表示每次从数据库读取的记录数。在服务写好安装后测试的时候,这个参数改过好几次,起初它的默认值是10000,后来分别改过为500,100,50和10。可是改完之后我不得不重启服务才能让配置文件起作用。经过几次这种折腾之后,感觉体验太差了。上网一搜,找到了这一篇:Do you have to restart a windows service if you change the app.config? 在原问题中,一个哥们给出了解答,就是通过ConfigurationManager.RefreshSection刷新某一配置节点,我们获取配置值的时候就不需要重启服务了:

        /// <summary>
        /// 获取每次处理记录数
        /// </summary>
        /// <returns></returns>
        private static int GetRecordCount()
        {
            int recordCount = 10000;
            try
            {
                ConfigurationManager.RefreshSection("appSettings");// 刷新命名节,在下次检索它时将从磁盘重新读取它。
                recordCount = Math.Abs(int.Parse(ConfigurationManager.AppSettings["RecordCount"]));
                if (recordCount == 0)
                {
                    recordCount = 10000;
                }
            }
            catch
            {
                recordCount = 10000;
            }
            return recordCount;
        }

经过测试,确实如此。

你可能会问,为什么加了那一行ConfigurationManager.RefreshSection(命名节点);就可以了呢?

查看MSDN,解释是这样的:“刷新命名节,这样在下次检索它时将从磁盘重新读取”。下面是VS里的函数说明:

        //
        // 摘要:
        //     刷新命名节,这样在下次检索它时将从磁盘重新读取它。
        //
        // 参数:
        //   sectionName:
        //     要刷新的节的配置节名称或配置路径和节名称。
        public static void RefreshSection(string sectionName);

原来,更改配置文件之后,应用程序读取配置的顺序不是从物理文件读取,而是从其缓存中读取(ConfigurationManager.RefreshSection方法在不影响其他节的前提下使指定配置节的缓存失效),必须强制刷新配置文件,才能读取到更改后的配置节信息 。

毫无疑问,和正常的读取配置文件节点方法相比,这个读取配置的方法在性能上应该有点影响,至于损失多少,会不会造成性能瓶颈,你懂的。

最后,从MSDN的例子我们也可以看出来,这个方法对于动态写入/读取配置文件非常有效。不过对于web应用程序这个方法可能不适合,因为大家知道,修改web.config相当于重启了web应用程序。








本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2011/04/24/2026381.html,如需转载请自行联系原作者

目录
相关文章
|
10月前
|
NoSQL Redis Windows
windows服务器重装系统之后,Redis服务如何恢复?
windows服务器重装系统之后,Redis服务如何恢复?
160 6
|
6月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
455 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
6月前
|
人工智能 算法 机器人
重启“APP工厂”,张一鸣要做AI时代的爱迪生?
互联网时代的弄潮儿在移动互联网浪潮中经历了起伏,而今在大模型时代再次面临挑战。字节跳动作为移动互联网时代的新贵,正以激进的姿态迎战大模型带来的变革。通过重启“APP工厂”模式,字节跳动不仅在AI应用层推出了20余款产品,还在模型层进行了大规模投入,如豆包大模型家族的发布。尽管面临资源和技术的双重挑战,字节跳动凭借其强大的执行力和战略调整能力,继续在大模型赛道上占据一席之地。然而,历史经验表明,新技术往往伴随着行业格局的重塑,字节跳动能否在这场技术革命中保持领先地位,仍需时间检验。
|
8月前
|
网络安全 Windows
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。
630 4
|
9月前
|
边缘计算 安全 网络安全
|
9月前
|
JavaScript
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
这篇文章介绍了如何将webpack的配置文件分离成开发环境和生产环境的配置文件,以提高打包效率。
135 1
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
|
9月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
174 9
|
9月前
|
应用服务中间件 Apache Windows
免安装版的Tomcat注册为windows服务
免安装版的Tomcat注册为windows服务
263 3
|
9月前
|
Java 关系型数据库 MySQL
java控制Windows进程,服务管理器项目
本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。
116 1
|
9月前
|
API 开发工具 UED
在 UWP 中使用 Windows App SDK
【10月更文挑战第17天】在UWP中使用Windows App SDK可增强应用功能和性能。首先了解SDK特性,接着安装Visual Studio 2022及以上版本,并从微软官网下载安装SDK。配置项目时,确保目标版本支持SDK,添加SDK引用后即可使用新API提升应用体验。开发过程中应充分利用调试工具进行测试,确保应用的兼容性和稳定性。
171 0

热门文章

最新文章