优化是否会改善性能?

时间:2014-09-08 23:20:17

标签: vb.net visual-studio-2012

团队遇到了一个我们无法解释的有趣问题。我们的一位用户抱怨说在他的机器上运行代码很慢。我们调查了该问题,并能够在VM上复制该问题。

这里只需注意:代码分为不同的程序集。主应用程序是EXE,程序的其余部分是汇编DLL,它们是自己的项目。

首先我们测试了数据库。由于负载,有时生产数据库可能比dev数据库慢。这没有任何明显的差异。在这两种情况下启动代码大约需要15秒。慢〜......设计器文件有4400行代码。

我们尝试了ngen,gac和其他一些尝试来解释缓慢但没有任何效果。

经过多次不同的测试后,我们的首席开发人员终于找到了问题。当我们将Release版本部署到VM时,它是SLOW(加载表单15秒)。当我们将DEBUG版本部署到VM时,它是快速的(在5秒内加载表单)。经过进一步调查后,我们发现当我们禁用优化时(双击我的项目在vb.net项目文件夹中,选择编译,然后选择高级编译选项,取消选中启用优化),代码比当优化开始时。我们确认在IntializeComponent事件期间所有情况下都会发生代码减速。

然而......只是为了甩掉一条大皱纹。我们在我们的开发机器上安装了ANTS性能分析器,当我们在3.1秒内运行代码并优化关闭时。

添加另一个皱纹......当在调试器中运行InitializeComponent代码时,启用优化后代码将在891ms内运行。优化的完全相同的代码在SAME开发机器上的visual studio外部运行,代码运行在11,796ms。

第二次运行相同的代码,而不关闭应用程序,代码运行同样快,开启或关闭结果的优化都是100毫秒(调试/外部可视工作室)

所有操作系统都在运行Windows 7(x64),代码库是为AnyCPU编译的,所有测试机器都安装了框架4.5(与开发机器相同),但项目是针对框架4.0构建的(出于XP兼容性目的)

如果那里的任何人有过这样的经历,那么我们将非常感激。显然我们很难过,而且有点神秘。有些人声称他们的发布代码比他们在互联网上的调试代码运行得慢,但是大多数回复都是在#34;那就是奇怪的"但似乎没有人知道。我们的袖口思维认为这是.NET框架的一个问题。

1 个答案:

答案 0 :(得分:0)

根据我们迄今发现的情况,以下似乎是个问题。 InitializeComponent中.NET代码的JIT需要花费时间。我们做了一堆旧学校"分析,我们已经确认延迟发生在甚至调用InitializeComponent事件之前。一旦代码实际进入子程序,它就会在一两秒内运行(这就是我们认为这种复杂形式的正常情况)。

事实证明这个问题已报告给微软,但对此没有多少可见性,所以如果你打算在那里复制我们的问题,请点击MS下的火,登录你的MS帐户并将问题标记为由你复制(只要你可以复制它)。 https://connect.microsoft.com/VisualStudio/feedback/details/824721/64bit-jit-compiler-works-very-slow-when-initializecomponent-method-is-processed

解决方法: 显然,您也可以在项目的编译器中关闭优化,但是如果您希望保留它们并且仅针对特定表单,则以下内容也可以。

如果输入Designer文件并将此行放在InitializeComponent之上

原来微软正在创建一个新的JIT。叫RyuJIT。但是,要获得这个令人敬畏的新bug集,您必须升级到Windows 8.1!

相关问题