Split user.config into different files for faster saving (at runtime)
在我的C Windows窗体应用程序(.net 3.5/vs 2008)中,我有3个设置文件,生成一个user.config文件。
一个设置文件包含较大的数据,但很少更改。经常更改的数据很少。但是,由于保存设置总是在写入整个(XML)文件,所以它总是"慢"。
1 | SettingsSmall.Default.Save(); // slow, even if SettingsSmall consists of little data |
我是否可以通过某种方式将设置配置为生成两个文件,从而导致:
1 2 | SettingsSmall.Default.Save(); // should be fast SettingsBig.Default.Save(); // could be slow, is seldom saved |
我已经看到我可以使用SecoinInformation类进行进一步的定制,但是对我来说最简单的方法是什么?只需更改app.config(config.sections)就可以做到这一点吗?
---添加了有关app.config的信息
我得到一个文件的原因可能是app.config中的配置。这就是它的样子:
2添加第二个和第三个设置文件后,我得到了部分。我没有注意到这一点,所以它不知何故是对2008年的违约。single user.config有这3个部分,它是绝对透明的。
只有我不知道如何告诉app.config创建三个独立文件而不是一个。我已经使用上面的app.config"玩转",但例如,当我删除config部分时,应用程序会异常终止。
正如您已经发现的,在编译时,vs将项目中的所有配置和设置文件放入一个大的
一种解决方案是让您自己实现一个设置类,并让它加载另一个文件。
另一种方法是在ConfigurationManager中使用OpenMappedExeConfiguration方法。您可以加载配置文件并使用
1 2 3 4 5 6 7 | ExeConfigurationFileMap map = new ExeConfigurationFileMap(); map.ExeConfigFilename ="test.config"; Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); var section = ((AppSettingsSection)configuration.GetSection("appSettings")).Settings; foreach (string key in section.AllKeys) { Console.WriteLine("{0}={1}", key, section[key].Value); } |
您应该能够获得一个自定义的部分,并在上面使用save方法。
最终,我使用自己的设置提供商来实现我的目标:我发现了两个最有用的资源开始编写这样的提供者
我使用了1的修改版本。使用2中的一些诀窍。我可以为每个设置设置使用哪个提供者,所以我坚持这种方法。然而,我一直试图避免编写自己的提供者,但是每当我检查这个主题时,我发现没有更好的方法可以将这些部分分割成独立的文件。
不过,我也觉得帕特里克的方法很有趣,我一有时间就会试一试。谢谢您!
1 |
注意:但是当我处理user.settings时发现有一个困难,即一旦卸载应用程序,这些设置将不会从保存的位置删除,而且只有管理权限用户才能访问这些文件。所以请确保您的设置文件在需要或不需要