保存慢速应用程序

本文关键字:应用程序 保存 | 更新日期: 2023-09-27 18:06:15

我有一个带有复选框的元素列表。项目在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的第一项时,.Content: All我需要改变所有元素的所有IsChecked属性。

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

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

有办法改进吗?

保存慢速应用程序

设置存储在用户配置文件中的XML文件中,因此,无论何时保存设置,都会有短暂的延迟。没办法改变。

在你的情况下,一个可能的解决方案是在复选框被选中时不保存设置,而是在其他事件(例如设置对话框的OK按钮等)中保存设置。

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

第三种解决方案是只更改设置对象,但不保存,直到应用程序关闭。这会减慢程序关闭的速度,但是…