首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >64位上的.Net 4.0应用程序比32位慢(分析和可能的解决方案)(应用程序正在使用NetAdvantage)

64位上的.Net 4.0应用程序比32位慢(分析和可能的解决方案)(应用程序正在使用NetAdvantage)
EN

Stack Overflow用户
提问于 2012-10-20 01:53:20
回答 3查看 8.2K关注 0票数 8

我们有用VB .NET 4.0 / VS2010编写的.NET应用程序,编译时所有项目都设置为调试和发布配置的AnyCPU设置。

所有其他应用程序在64位上都更快,但我们可怜的应用程序除外;) (我们确实在不同的时间、不同的负载下测试了这些应用程序,结果总是大同小异。)

如上所述,该应用程序是使用AnyCPU构建的,它确实在64位操作系统(通过TaskManager检查)下作为64位程序集运行。该应用程序本身是一个WinForms应用程序,使用NetAdvantage Forms v10.3,并定期查询和写入MS SQL Server2008。

不同的目标机器都在同一网络上,因此到数据库的路径(性能测试使用的是同一数据库)是相同的,我不认为问题出在数据库或网络本身。

我确实注意到了一件事,这对我来说似乎很奇怪,那就是当我在MainForm启动时使用秒表构建不同的“分析步骤”时,InitializeComponent方法在64位上花费的时间是64位的两倍,大约4秒,而在32位上只需要1.5秒。

这是我们在两个系统上部署的完全相同的应用程序,没有不同的配置。

所以我有两个问题:

你知道这是什么原因吗?

还有:确定“违规”代码片段的最佳方法是什么?目前,我使用秒表,并尝试缩小范围。但在我看来,就我们的应用程序而言,64位机器上的一切都要慢一些,所以我不太确定我能不能把它分解成具体的语句。

谢谢你的帮助,非常感谢……

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-20 11:02:05

事实证明,一旦我们从AnyCPU转换到专门的x86编译,也就是在x64位平台上以x86运行,我们就回到了“好速度”。

票数 4
EN

Stack Overflow用户

发布于 2014-12-10 04:40:01

有同样的问题-是的,JIT是罪魁祸首。通过明智地使用msgbox,将其范围缩小到需要10秒才能启动的方法(在调用大型方法之前调用message box,然后作为大型函数的第一行)。而且,是的,只有在以AnyCPU身份编译时才会看到这一点,但在显式x86时不会看到;在调试中运行时也不会看到。

在我的例子中,它是一个5000行的Windows Forms InitializeComponent

为了证明这一点,运行(提升的) "c:\windows\<.net framework dir>\ngen.exe install <myassembly.exe>“,它将编译一个本机映像。如果这解决了它,那么是的,JIT是罪魁祸首。

长期解决方案:

  • 在您每次部署程序以重新构建本机映像时使用ngen (或使用ngen更新进行重新构建,但显然仅在安装一次后才起作用);(缺点是管理ngen映像和ngen所需的时间。这是我采用的方法,因为可以将属性<System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.NoOptimization)>添加到方法中,因为对于较大的applications.)
  • or,总体性能会得到提升。(在方法上禁用JIT,因此它的执行速度较慢,但您不需要支付JITing的初始开销,这对我们来说是最昂贵的部分)

(我怀疑这两种做法都是徒劳的,因为这将意味着放弃大方法的本机映像而一无所获。)

票数 4
EN

Stack Overflow用户

发布于 2014-03-01 01:15:02

我最近在一个应用程序中遇到了同样的性能问题。是的,将它编译为x86解决了这个问题;然后它在任一平台上都运行得很快。但启动响应时间缓慢的真正原因是由于32到64位的迁移问题。我认为,当应用程序启动时,它通过JIT过程将代码转换为IL,编译器确定代码中存在问题(如非类型安全代码),它必须解决这些问题才能在64位模式下运行。我偶然看到了这篇文章,现在正在尝试通过应用程序来确定是哪些部分导致了问题。请参阅本文:http://msdn.microsoft.com/en-us/library/ms973190.aspx。我可以让它单独运行,因为它可以工作,但理想情况下,如果问题得到解决,它将在64位模式下运行得更好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12979774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档