【发布时间】:2015-08-28 14:50:06
【问题描述】:
我想在程序关闭时保存一些 UI 更改。我已经读过,最简单的方法之一是使用设置。我想我会在程序关闭时将这些更改保存到设置中,而不是在每次用户更改这些设置时保存。所以,我有这个:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Properties.Settings.Default.PostProcessSubs = checkBox_PPSubs.Checked;
Properties.Settings.Default.Save();
}
这只是保存该复选框在默认情况下是打开还是关闭。但是,当我有这个时,当我按 X 关闭它时,应用程序会挂起一两秒钟。如果我注释掉 save() 命令,它会正常关闭,但当然不会保存更改。除此之外,一切正常,所以我觉得这个过程这么慢很奇怪。
顺便说一句,我的设置并不臃肿,我只有两个布尔值和两个小字符串。
编辑:这仅在通过 Start without Debugging 运行时发生。运行槽调试或槽发布工作正常。还是很奇怪。
Edit2:不,仍然会发生。慢得要命。
【问题讨论】:
-
您是否检查过它保存的设置文件的位置?它是在网络驱动器上还是在一些较慢的媒体上?
-
也许 CLR 正在 jitting 一些代码。如果您在程序的同一运行中进行第二次保存,是否更快?
-
XML 序列化并不算太快,但是没有任何情况下重复执行它会花费 40 亿个 cpu 周期。这是一个环境问题。 90% 的情况是程序员自愿在他们的机器上安装的垃圾软件,这种垃圾软件总是在任何 xml 文件中捆绑在一起。禁用您的反恶意软件,然后重试。并且只考虑在程序终止时保存,在设置更改的那一刻保存是危险的。如果更改导致您的程序轰炸,那么您很有可能会永远轰炸。
-
好吧,我发现在调试模式下运行时它工作正常,如果我在发布模式下编译它。但是,如果我通过 Start without Debugging 运行它(这就是我正在做的事情),那么问题就会发生。文件的位置就OK了,第二次运行也是一样。它工作正常,但为什么要在不调试的情况下启动会变慢呢?
-
在没有调试器的情况下运行它更慢没有任何意义。如果您直接从 Windows 运行调试版本(即根本不使用 Visual Studio 来启动它),它也会很慢吗?保存设置应该总是很快;甚至 1000 毫秒都非常慢,并且表明您的计算机上存在某种问题(如果检测到调试器正在运行,可能某些恶意软件仍然处于非活动状态?)。