我计划将所有配置设置存储在应用程序的app.config部分中(使用ConfigurationManager.AppSettings
类)。当用户使用应用程序的UI更改设置(单击复选框,选择单选按钮等)时,我打算将这些更改写到AppSettings
中。同时,在程序运行时,我计划从一个将不断处理数据的进程中不断访问AppSettings
。通过UI更改设置需要实时影响数据处理,这就是进程将不断访问AppSettings
的原因。
关于性能,这是一个好主意吗?编写.Net应用程序时,使用AppSettings
应该是“正确的方式”来存储和访问配置设置,但我担心此方法并非用于恒定的负载(至少就不断读取设置而言)。
如果有人对此有经验,我将不胜感激。
更新:我可能应该澄清几点。
这不是Web应用程序,因此仅将存储连接设置存储到应用程序可能会过分杀伤力。这是Windows窗体应用程序。
根据MSDN文档,ConfigurationManager
不仅用于存储应用程序级别设置,还用于存储用户设置。 (例如,在将应用程序安装为部分信任应用程序时,尤其重要。)
更新2:我接受lomaxx的回答,因为Properties
的确确实是一个不错的解决方案,而无需向我的应用程序(例如数据库)添加任何其他层。使用属性时,它已经完成了其他建议的所有缓存。这意味着所有更改和后续读取都在内存中完成,这使其速度非常快。仅当您明确告知更改时,属性才会将更改写入磁盘。这意味着我可以在运行时即时更改配置设置,然后仅在程序退出时进行最终保存到磁盘。
只是为了验证它确实能够处理我需要的负载,我在笔记本电脑上进行了一些测试,并且使用Properties能够每秒进行750,000次读取和7,500次写入。到目前为止,这远远超出了我的应用程序的需求,甚至超出了我的需求,在不影响性能的情况下,我非常安全地使用Properties。
最佳答案
因为您使用的是Winforms应用程序,所以如果它在.net 2.0中,则实际上存在一个为此目的而设计的用户设置系统(称为“属性”)。 This article on MSDN对此有很好的介绍
如果您仍然担心性能,那么请查看SQL Compact Edition,它类似于SQLite,但是我发现Microsoft产品与Winforms配合得很好,甚至可以使用make it work with Linq
关于c# - ConfigurationManager.AppSettings性能问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4157/