设置保存减慢应用

时间:2016-09-09 08:43:46

标签: c#

我有一个带复选框的元素列表。这些项目在Checkbox内可用,我将所有已检查的值保存在我的设置应用中,特别是,我有一个名为available_countries的字段,我将所有事件保存在此字段中。

基本上,当检查项目时,触发相关事件:

private void AvailableCountries_Checked(object sender, RoutedEventArgs e)
{
    var item = sender as CheckBox;

    if (item.Content.ToString() == "All")//first item of the list need to check all
    {
        Vm.AvailableNations.Select(c => { c.IsChecked = true; return c; }).ToList(); //Execute the IsChecked update through linq
    }

    //Check if the checked value is already added in the settings..
    var nationsArr = Properties.Settings.Default.available_countries.Split(';');

    foreach (var country in nationsArr)
    {
        if (country == item.Content.ToString()) //Nation already added!
        {
           return;
        }
    }

    Properties.Settings.Default.available_countries += item.Content.ToString() + ";"; //Separator
   Properties.Settings.Default.Save();
}

现在这段代码运行良好且非常简单,但我注意到最后.Save()会降低应用性能,实际上当我点击ComboBox的第一项时,{ {1}}:.Content我需要更改所有元素的所有All属性。

我还需要检查设置中是否已添加该值。

我注意到如果我删除最后一行代码,我看不到延迟时间,大约1/2秒。

有一种方法可以改善它吗?

1 个答案:

答案 0 :(得分:1)

嗯,设置存储在用户配置文件的XML文件中,所以是的,每当您保存设置时,都会有短暂的延迟。没办法改变它。

在您的情况下,可能的解决方案是在选中复选框时不保存设置,但在某些其他事件中(例如设置对话框的“确定”按钮等)。

另一种解决方案是启动后台任务,更改值并保存设置,但您必须确保正确同步。

第三种解决方案是仅更改设置对象,但在应用程序关闭之前不会保存。这会减慢关闭应用程序的过程,但是......