Разделите user.config на разные файлы для более быстрого сохранения (во время выполнения) - PullRequest
2 голосов
/ 10 мая 2010

В моем приложении c # Windows Forms (.net 3.5 / VS 2008) у меня есть 3 файла настроек, в результате чего получается один файл user.config.

Один файл настроек состоит из больших данных, но редко изменяется. Часто изменяемых данных очень мало. Однако, поскольку сохранение настроек всегда записывает весь (XML) файл, оно всегда "медленное".

SettingsSmall.Default.Save(); // slow, even if SettingsSmall consists of little data 

Можно ли как-то настроить параметры, чтобы получить два файла, в результате чего:

SettingsSmall.Default.Save(); // should be fast
SettingsBig.Default.Save(); // could be slow, is seldom saved

Я видел, что могу использовать класс SecionInformation для дальнейшей настройки, однако, какой для меня самый простой подход? Это возможно, просто изменив app.config (config.sections)?

--- добавлена ​​информация о App.config

Причиной, по которой я получаю один файл, может быть configSections в App.config. Вот как это выглядит:

  <configSections>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="XY.A.Properties.Settings2Class" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
      <section name="XY.A.Properties.Settings3Class" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
    </sectionGroup>
  </configSections>

Я получил разделы, когда добавил второй и третий файл настроек. Я не обращал на это никакого внимания, поэтому он был каким-то образом по умолчанию для VS 2008. В одном файле user.config есть 3 раздела, он абсолютно прозрачен.

Только я не знаю, как сказать App.config создать три независимых файла вместо одного. Я "поиграл" с app.config выше, но, например, когда я удаляю разделы конфигурации, мои приложения завершаются с исключением.

Ответы [ 3 ]

1 голос
/ 01 июня 2010

Как вы уже обнаружили, VS компилирует все файлы конфигурации и настроек вашего проекта в один большой файл applicationname.exe.config при компиляции, и, насколько я знаю, вы не можете загрузить другой файл конфигурации в качестве "основного".

Одним из решений является создание собственной реализации класса настроек и загрузка в него другого файла.

Альтернативой этому может быть использование метода OpenMappedExeConfiguration в ConfigurationManager. Вы можете загрузить файл конфигурации и получить доступ к его значениям настройки приложения, используя

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.

0 голосов
/ 02 июня 2010

В конце концов я использовал свой собственный поставщик настроек для достижения своей цели: Я нашел два ресурса наиболее полезными, чтобы начать писать такой провайдер

  1. www.codeproject.com / KB / VB / CustomSettingsProvider.aspx? Тзд = 2934144 # xx2934144xx
  2. www.blayd.co.uk / download.aspx? PageId = 1013

Я использовал модифицированную версию 1. с использованием некоторых ноу-хау из 2. Я могу установить для каждого параметра, какой поставщик использовать, поэтому я придерживаюсь этого подхода. Тем не менее, я долго пытался избежать написания своего собственного провайдера, но всякий раз, когда я проверял эту тему, я обнаруживал не лучший подход для разделения разделов на отдельные файлы.

Тем не менее, я также нахожу подход Патрика интересным и буду испытывать его, как только у меня будет время. Спасибо!

0 голосов
/ 10 мая 2010
If it is slow , instead of doing in single file you can do it in multiple user.config.

Примечание: Но когда я работал над user.settings, я обнаружил одну трудность: после удаления приложения настройки не удаляются из сохраненного местоположения, так как доступ к этим файлам имеет только пользователь с правами администратора. Поэтому, пожалуйста, убедитесь, что ваши установочные файлы необходимы или нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...