Here is my initial key value store implementation:
using System.Configuration; using System.Xml; public sealed class DebuggerSettings { public string this[string propertyName] { get { var store = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); UserSettingsGroup values = (UserSettingsGroup)store.SectionGroups["userSettings"]; if (values == null) { return null; } ClientSettingsSection myValues = (ClientSettingsSection)values.Sections[typeof(DebuggerSettings).FullName]; if (myValues == null) { return null; } SettingElement setting = myValues.Settings.Get(propertyName); if (setting == null) { return null; } string returnValue = setting.Value.ValueXml.InnerText; return returnValue; } set { var store = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); UserSettingsGroup addSectionGroup = (UserSettingsGroup)store.SectionGroups["userSettings"]; if (addSectionGroup == null) { addSectionGroup = new UserSettingsGroup(); store.SectionGroups.Add("userSettings",addSectionGroup); } string sectionName = (typeof(DebuggerSettings).FullName); ClientSettingsSection clientSettingsSection = (ClientSettingsSection)addSectionGroup.Sections[sectionName]; if (clientSettingsSection == null) { clientSettingsSection = new ClientSettingsSection(); clientSettingsSection.SectionInformation.AllowExeDefinition = ConfigurationAllowExeDefinition.MachineToLocalUser; addSectionGroup.Sections.Add(sectionName, clientSettingsSection); } SettingElement addMe = new SettingElement(propertyName, SettingsSerializeAs.String); XmlElement element = new XmlDocument().CreateElement("value"); element.InnerText = value; addMe.Value.ValueXml = element; clientSettingsSection.Settings.Add(addMe); store.Save(); } } }
2 comments:
You're aware that every access to every property of yours will cause disk reads and writes operations? Seems pretty unefficient to me. Why don't you instead load your configuration once, access or set the properties as you please and call a Save document whenever you want to commit to disk?
Great point David.
Post a Comment