【问题标题】:C# - Settings.Default.Save() is very slowC# - Settings.Default.Save() 非常慢
【发布时间】: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 毫秒都非常慢,并且表明您的计算机上存在某种问题(如果检测到调试器正在运行,可能某些恶意软件仍然处于非活动状态?)。

标签: c# save settings


【解决方案1】:

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

 Properties.Settings.Default.ProgramPath = 
System.IO.File.ReadAllText(openFileDialog1.FileName.ToString());

显然它应该只是

 Properties.Settings.Default.ProgramPath = 
openFileDialog1.FileName.ToString();

当然,我的原始代码是将整个可执行文件转换为文本,并将其保存到配置文件中。配置文件变得臃肿,即使我不再使用那部分代码,配置文件也已经膨胀了。因此,每当我保存任何其他配置时,不是保存几个 KB 的文件,而是保存一个 16 MB 的文件。每次。所以,是的……

TLDR:检查您的配置文件大小...可能由于某种原因而臃肿。

【讨论】:

    猜你喜欢
    • 2015-04-02
    • 2012-04-14
    • 1970-01-01
    • 2022-01-25
    • 2015-05-22
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2011-09-21
    相关资源
    最近更新 更多