gpt4 book ai didi

c# - .Net Release 构建工作速度比 Debug 慢

转载 作者:太空狗 更新时间:2023-10-29 23:11:57 25 4
gpt4 key购买 nike

最近几天我遇到了一件最奇怪的事情。我发现我的发布版本实际上比调试版本执行

<强>1。问题

我终于从我的 Windows 窗体 exe 中的入口点 (Main) 剥离了所有东西,只留下这个:

 [STAThread]
static void Main(params string[] args)
{
Stopwatch sw = Stopwatch.StartNew();
System.Xml.Serialization.XmlSerializer xmlS =
new System.Xml.Serialization.XmlSerializer(typeof(TestClass));
sw.Stop();
MessageBox.Show(sw.Elapsed.ToString());
}

所以我实际上不再实例化任何表单,只进行测试。 TestClass 是一个只有三个公共(public) int 属性的小类,没有其他任何东西。我的主 .exe(Windows 窗体)大小约为 1Mb,如果这有什么不同的话。

<强>2。结果

在 Debug 模式下,我的 Elapsed 时间是 ~200ms,而在 Release 模式下它需要~1.2s。

<强>3。附加信息

奇怪的是,当我尝试将该解决方案中的一些其他项目设置为启动项目时,因为在这种情况下它工作得很快(与上面的代码完全相同)。

<强>4。快速破解

为了尽快修复此错误,我在我的解决方案中创建了一个新的 .exe 启动项目,它通过引用我的第一个入口项目来实例化并运行主申请表。在那种情况下它再次快速运行,我的入口 exe 现在只有 24kb 大,只包含一个静态 Main 方法。

有没有人遇到过类似的行为?如果我在其他地方偶然发现了这个,通过查看上面的代码,我可能会假设某处有一个静态初始化器,在一个单独的线程中做大量的工作(但这里不是这种情况,我没有那个东西),而且只在发布版本中运行?

[编辑] 更多信息:我知道 XmlSerializer 在运行时生成 IL 代码,但我的实际问题是为什么它在这种情况下比在其他情况下运行得慢。当我仅对实际序列化进行基准测试时,它在 Release 中的速度要慢 3 倍(但前提是我从我的初始项目运行它)。

[更新] 现在是有史以来最奇怪的部分:经过几个修改/重建步骤后,我的新入门项目开始表现得像第一个项目一样 - 启动缓慢,加载缓慢。我更改了项目名称和 GUID 并重新构建它,它再次快速运行。

最佳答案

我认为这可能是因为 XmlSerializer 在 Release模式下启动时执行 NGEN-ish 工作,但在 Debug模式下则不然。参见例如

http://blogs.msdn.com/billwert/archive/2008/02/23/use-of-sgen-exe-to-avoid-common-xmlserializer-performance-pitfalls.aspx

一些细节。

关于c# - .Net Release 构建工作速度比 Debug 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/771727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com