关于c#:将user.config拆分为不同的文件以便更快地保存(在运行时)

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将项目中的所有配置和设置文件放入一个大的applicationname.exe.config文件中,据我所知,您不能将另一个配置文件加载为"主配置文件"。

一种解决方案是让您自己实现一个设置类,并让它加载另一个文件。

另一种方法是在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方法。


最终,我使用自己的设置提供商来实现我的目标:我发现了两个最有用的资源开始编写这样的提供者

  • www.codeproject.com/kb/vb/customsettingsProvider.aspx?消息=2934144 XX2934144XX
  • www.blayd.co.uk/download.aspx?PaGID=1013
  • 我使用了1的修改版本。使用2中的一些诀窍。我可以为每个设置设置使用哪个提供者,所以我坚持这种方法。然而,我一直试图避免编写自己的提供者,但是每当我检查这个主题时,我发现没有更好的方法可以将这些部分分割成独立的文件。

    不过,我也觉得帕特里克的方法很有趣,我一有时间就会试一试。谢谢您!


    1
    If it is slow , instead of doing in single file you can do it in multiple user.config.

    注意:但是当我处理user.settings时发现有一个困难,即一旦卸载应用程序,这些设置将不会从保存的位置删除,而且只有管理权限用户才能访问这些文件。所以请确保您的设置文件在需要或不需要