我在C#中创建了一个流行的Winforms程序,它有很多GUI小部件,并发现当平台目标为x64时,启动速度比86。在x64目标下,启动大约需要5秒钟,这对用户体验有负面影响。我想让它更快。启动Winforms程序相对于x86在x64下速度要慢10倍以上
我也试过用我的另一个程序,还发现在x64下的启动时间是x86的两倍或三倍。
所以我开始想知道是什么导致了它。我的程序使用了很多小部件,为了测试理论,我决定用800个按钮创建一个测试项目!我将它们全部设置为Visible=False
,以便重新绘制/刷新速度不会混淆水域。
令我吃惊的是,在64开始了很多比86相当于慢。然后我开始计时InitializeComponent();
部分,果然,x64版本运行时间约为3.5秒。另一方面,x86只用了大约0.275秒。这快了近13倍!
.NET Framework 2.0,3.0和3.5同样糟糕。针对.NET 4 &在x64下4.5 4.5秒左右的时间要好得多,但这仍然是缓慢的3倍(x86大约是0.28秒),我想用.NET 3.5来增加用户基数。
所以我的问题是:是什么导致x64版本启动这么慢,我怎么可以让它更快,以便它相媲美x86版本?
如果有人想立即测试,我创建了VS 2010项目,该项目可以在这里下载的ZIP:http://www.skytopia.com/stuff/64_vs_32bit_Startup_Speed.zip
32位和64位之间的一个性能差异在于64位JITter编译所花的时间更长(但生成的代码更好)。但我认为你的代码不太可能受到JIT性能的限制,所以不应该成为你的性能问题的原因。新的RyuJIT提高了64位JIT时间,但产生比当前64位JITter更糟的代码。 – CodesInChaos
@CodesInChaos:有趣。我决心要做到这一点的底部。它具有很高的可重复性,对许多用户和开发人员有很大的影响。 –
将.net 4.5而不是3.5的性能从我的机器上的2.0秒提高到1.3。 – CodesInChaos