Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置保存减速应用程序_C# - Fatal编程技术网

C# 设置保存减速应用程序

C# 设置保存减速应用程序,c#,C#,我有一个带有复选框的元素列表。这些项目在复选框中可用,我将所有选中的值保存在我的设置应用程序中,特别是,我有一个名为可用\u countries的字段,我将所有事件保存在此字段中 基本上,当检查一个项目时,会触发相关事件: private void AvailableCountries_Checked(object sender, RoutedEventArgs e) { var item = sender as CheckBox; if (item.Content.ToStr

我有一个带有复选框的元素列表。这些项目在
复选框中可用,我将所有选中的值保存在我的设置应用程序中,特别是,我有一个名为
可用\u 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()
会降低应用程序的性能,事实上,当我单击包含as
组合框的第一个项目时,它会降低应用程序的性能。Content
All
我需要更改所有元素的
IsChecked
属性

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

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


有一种改进方法吗?

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

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

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


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

I想创建一个json文件来存储所有这些东西,为什么?那么,序列化为JSON会增加额外的开销。。。不,我只需要使用内置设置机制并尝试异步保存。问题是,你必须在某个时候存钱。无论您是使用内置机制还是任何其他实现。这是给定的,因此使用JSON没有帮助。也许你应该决定现在是否需要存钱?你也可以保存,然后应用程序退出。嗯,你猜对了,我会修改我的代码使其同步。现在我想,在窗口/应用程序关闭时保存可能是最简单的解决方案,因为它不需要任何异步处理。正如Thorsten Dittmar所说:启动一个新的后台任务(
Systen.Threading.Task.TaskFactory.StartNew(t=>Properties.Settings.Default.Save();).Start();
)使linq查询更短:
Vm.AvailableNations.Select(c=>{return c.IsChecked==true;})。ToList()
很难解释,往往是环境问题。请尝试另一台机器。一般来说,这是您永远不应该做的事情。这太危险了,如果新设置有任何原因导致您的程序崩溃,那么它将永远崩溃。修复起来非常困难。只有在程序正常退出时才保存设置。@HansPassa我有上一代的i7和16gb或ram。我认为我需要改进我的代码,而不是改变PCT。破坏这样一台好的机器不需要太多,只需要蹩脚的反恶意软件。无论如何,这不是重点。