.NET和64位应用程序

问题描述:

我想让现有的.NET应用程序(WinForms和WebForms)在64位机器上运行,并进行了优化,以充分利用64位机器上可用的更多内存。我需要做些什么来使应用程序利用内存?我只是选择目标CPU为64位?选择目标与仅为所有CPU编译应用程序有什么优势,并让.NET在本地优化应用程序?.NET和64位应用程序

Crystal Reports(在VS 2008中)是否针对64位进行了优化并利用了高端内存?

+2

什么是您的应用程序一样,它需要超过4场演出的记忆?有一点需要考虑,Visual Studio(相当复杂的应用程序)是一个32位应用程序。 – R0MANARMY 2010-04-07 04:03:10

+1

你可以将第二个问题完全分解为另一个问题。 – 2010-04-07 04:03:46

+0

@ R0MANARMY实际上,.NET应用程序将开始无法使用大约2GB的内存。我已经用一个非常复杂的通话记录处理应用程序来处理这个限制,这个应用程序需要在启动时快速处理大量事件。增加虚拟内存的好处确实对此有所帮助。当然可以想象,复杂的报告可能会有很大的影响。 – Josh 2010-04-07 04:09:38

您可以将目标CPU设置为“AnyCPU”。这将使x86机器上的x86代码和x64机器上的x64代码进行JIT。请记住,您引用的任何非托管DLL很可能会导致问题。我不知道Crystal Reports是否对非托管DLL有任何依赖关系(它曾经是一个关于ActiveX废话的薄包装,现在还不确定)

如果您的应用程序只引用为AnyCPU编译的托管代码,您应该精细。

预先指定CPU架构没有真正的“优势”。这是一种处理这样的事实,即您可能需要确保应用程序仅适用于某个特定架构的JIT。例如,如果使用Microsoft Jet OLEDB提供程序,并且您的应用程序是针对AnyCPU编译的,则在x64操作系统上,它将在运行时失败,因为它将作为x64进程运行,并且Jet没有x64 OLEDB驱动程序。

在这种情况下,您可以强制它将x86作为目标,然后即使在x64操作系统上,应用程序仍然会将JIT转换为x86。

+0

+1 - 比我的好多了 – 2010-04-07 04:08:39

+0

我以为.Net Framework在64bit盒子上使用WOW运行 – 2010-04-07 04:09:21

+0

@KNoodles,没有一个x64框架。如果入口程序集编译为x86,那么整个事情显然将在WoW中运行。但默认是JIT到64。至少直到现在默认为x86的VS 2010才能隐藏Intellitrace在x64中无法运行的事实。的Bleh。 – Josh 2010-04-07 04:12:55

除非需要条件编译才能够替换需要本地支持的第三方组件,否则我通常会建议将其留给运行时(任何CPU)。

在目标机器上的框架将照顾它,它使您的生活更轻松,而不必管理各种环境的构建配置。

有CR运行的2种口味:

  • 水晶报表(完整版运行时)
  • 水晶报表基本(束在VS 2005,2008年)

你的64位支持将取决于您为应用程序选择哪个版本。

Crystal Reports XI Release 2或Crystal Reports 2008没有64位dll。只有.NET 2005(CR 10.2)和.NET 2008(CR 10.5)软件包(CR Basic)是64位的。如果您需要为CR XI或CR 2008使用完整的Crystal Reports运行时,则必须以32位模式(x86)编译您的应用程序。

SAP link 1

SAP link 2