保存慢速应用程序
本文关键字:应用程序 保存 | 更新日期: 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按钮等)中保存设置。
另一个解决方案是启动一个后台任务来更改值并保存设置,但你必须确保这是正确同步的。
第三种解决方案是只更改设置对象,但不保存,直到应用程序关闭。这会减慢程序关闭的速度,但是…