我正在编写一个新的.NET应用程序,将在32位和64位上部署。有许多与移植应用程序相关的问题 - 我不关心从编程/移植角度来看的陷阱。 (即:正确处理本机/COM互操作,嵌入在结构中的引用类型改变结构的大小等)
然而,这个问题及其答案让我思考 - 我还忽视了哪些问题?
有许多问题和博客文章绕过这个问题,或者只涉及其中一个方面,但我没有看到任何编译出一份体面问题列表的东西。
特别是 - 我的应用程序非常CPU密集且具有巨大的内存使用模式(因此首先需要64位),同时又是图形化的。我担心CLR或JIT在64位Windows上运行时可能存在其他隐藏问题 (使用.NET 3.5sp1)。
以下是我目前知道的一些问题:
- (现在我知道) 属性,即使是自动属性,在x64中也不会被内联。
- 应用程序的内存配置文件会发生变化,这是由于引用大小不同,但还因为内存分配器具有不同的性能特征。
- x64上的启动时间可能会变慢
我想知道人们在64位Windows上的JIT发现了哪些其他具体的问题,并且是否有任何性能方面的解决方法。
谢谢大家!
----编辑-----
仅作澄清 -
我知道过早优化通常是不好的。我知道对系统进行第二次考虑通常是不好的。我也知道适用于64位的可移植性有其自身的问题 - 我们每天在64位系统上运行和测试以帮助解决这个问题等。
然而,我的应用程序并不是您典型的商业应用程序。它是一个科学软件应用程序。我们有许多进程在所有核心上使用100%的CPU(高度线程化)长达数小时。
我花费了很多时间对应用程序进行分析,这使得巨大的差异。但是,大多数分析器禁用JIT的许多功能,因此在分析器下运行时,例如内存分配,JIT中的内联等细节可能非常难以确定。因此我需要提出这个问题。