C#-Settings.Default.Save()速度非常慢

C#-Settings.Default.Save()速度非常慢,c#,save,settings,C#,Save,Settings,我想在程序关闭时保存一些UI更改。我读过一篇文章,其中一个最简单的方法就是设置。我想我应该在程序关闭时保存对设置的更改,而不是每次用户更改这些设置时都保存这些更改。所以,我有这个: private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Properties.Settings.Default.PostProcessSubs = checkBox_PPSubs.Chec

我想在程序关闭时保存一些UI更改。我读过一篇文章,其中一个最简单的方法就是设置。我想我应该在程序关闭时保存对设置的更改,而不是每次用户更改这些设置时都保存这些更改。所以,我有这个:

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    { 
        Properties.Settings.Default.PostProcessSubs = checkBox_PPSubs.Checked;
        Properties.Settings.Default.Save();
    }
它只保存默认情况下该复选框是打开还是关闭。但是,当我有这个功能时,当我按X关闭它时,应用程序会挂起一两秒钟。如果我注释掉save()命令,它会关闭ok,但当然不会保存更改。除此之外,一切正常,所以我觉得很奇怪,这个过程如此缓慢

顺便说一句,我的设置不是臃肿的,我只有两个布尔值和两个小字符串

编辑:只有在未调试的情况下启动运行时才会发生这种情况。运行槽调试或槽释放工作正常。还是很奇怪


Edit2:不,还是会发生。慢得要命

好吧,我解决了这个问题,我觉得自己很迟钝。但如果有人有类似的问题,这里有一个指针。 所以,我的配置文件是16MB。为什么?其中一个配置是可执行文件的路径。然而,我用于该可执行文件的代码是不正确的,因为我没有考虑程序的其他部分就复制了它。我有这个。。。真可悲

 Properties.Settings.Default.ProgramPath = 
System.IO.File.ReadAllText(openFileDialog1.FileName.ToString());
很明显,它本该如此

 Properties.Settings.Default.ProgramPath = 
openFileDialog1.FileName.ToString();
当然,我的原始代码是将整个可执行文件转换为文本,并将其保存到配置文件中。配置文件膨胀了,即使我不再使用这部分代码,配置文件也已经膨胀了。所以,每当我保存任何其他配置时,它不是保存几个KB的文件,而是保存一个16MB的文件。每次都是。所以,是的


TLDR:检查您的配置文件大小。。。可能是因为某种原因而肿胀。

好的,我解决了这个问题,我觉得自己很迟钝。但如果有人有类似的问题,这里有一个指针。 所以,我的配置文件是16MB。为什么?其中一个配置是可执行文件的路径。然而,我用于该可执行文件的代码是不正确的,因为我没有考虑程序的其他部分就复制了它。我有这个。。。真可悲

 Properties.Settings.Default.ProgramPath = 
System.IO.File.ReadAllText(openFileDialog1.FileName.ToString());
很明显,它本该如此

 Properties.Settings.Default.ProgramPath = 
openFileDialog1.FileName.ToString();
当然,我的原始代码是将整个可执行文件转换为文本,并将其保存到配置文件中。配置文件膨胀了,即使我不再使用这部分代码,配置文件也已经膨胀了。所以,每当我保存任何其他配置时,它不是保存几个KB的文件,而是保存一个16MB的文件。每次都是。所以,是的


TLDR:检查您的配置文件大小。。。可能由于某些原因而膨胀。

是否检查了它保存的设置文件的位置?它是在网络驱动器上还是在较慢的介质上?也许CLR正在抖动一些代码。如果在程序的同一次运行中进行第二次保存,它会更快吗?XML序列化并不太快,但在任何情况下,重复执行XML序列化都不会耗费40亿cpu周期。这是一个环境问题。90%的情况是程序员自愿安装在他们机器上的垃圾软件,这种软件总是在任何xml文件中捆绑在一起。禁用反恶意软件,然后重试。并且只考虑在程序终止时保存,在设置更改的危险时刻保存。如果更改导致你的程序爆炸,那么你很有可能永远爆炸。好吧,我发现它在调试模式下运行时工作正常,如果我在发布模式下编译它。然而,如果我在没有调试的情况下通过Start运行它(这就是我正在做的),那么问题才会发生。文件的位置正常,第二次运行相同。它可以正常工作,但是为什么他妈的应该在没有调试的情况下启动呢?让它在没有调试的情况下运行时变慢是没有任何意义的。如果直接从Windows运行调试构建(即根本不使用Visual Studio启动它),是否也很慢?保存您的设置应该总是非常快;即使是1000毫秒的速度也非常慢,并且表明您的计算机上存在某种问题(如果检测到调试器正在运行,可能是某些恶意软件仍处于非活动状态?)。您是否检查了它保存的设置文件的位置?它是在网络驱动器上还是在较慢的介质上?也许CLR正在抖动一些代码。如果在程序的同一次运行中进行第二次保存,它会更快吗?XML序列化并不太快,但在任何情况下,重复执行XML序列化都不会耗费40亿cpu周期。这是一个环境问题。90%的情况是程序员自愿安装在他们机器上的垃圾软件,这种软件总是在任何xml文件中捆绑在一起。禁用反恶意软件,然后重试。并且只考虑在程序终止时保存,在设置更改的危险时刻保存。如果更改导致你的程序爆炸,那么你很有可能永远爆炸。好吧,我发现它在调试模式下运行时工作正常,如果我在发布模式下编译它。然而,如果我在没有调试的情况下通过Start运行它(这就是我正在做的),那么问题才会发生。文件的位置正常,第二次运行相同。它可以正常工作,但是为什么他妈的应该在没有调试的情况下启动呢?让它在没有调试的情况下运行时变慢是没有任何意义的。如果直接从Windows运行调试构建(即根本不使用Visual Studio启动它),是否也很慢?保存您的设置应该总是非常快;即使是1000毫秒的速度也非常慢,并且表明您的计算机上存在某种问题(如果检测到调试器正在运行,可能是某些恶意软件仍处于非活动状态?)。您是否检查了它保存的设置文件的位置?它是在网络驱动器上还是在更慢的驱动器上