想象一个纯.NET应用程序,它不使用COM组件也不使用PInvoke。目标系统是32位还是64位是否重要?
答案 0 :(得分:6)
如果应用程序的目标是AnyCPU,则运行时行为将会有所不同,特别是内存使用和限制。
在64位上,不会有相同的32位内存限制(理论上2GB最大内存,但实际上是1.2-1.6)。但是,所有对象引用都是两倍大,因此64位系统将使用更多内存。
此外,64位系统通常还有额外的寄存器等,因此有时性能会略有提高。但这是特定于平台的。
如果应用程序的目标是x86,它将在WoW64下运行,其行为几乎与它在32位系统中的行为方式相同。
答案 1 :(得分:4)
除了Reed Copsey所确定的那些之外,另一种重要的方式是,如果你的“纯”应用程序碰巧使用System.IntPtr结构,或者它使用不安全的代码(这与P / Invoke)和指针算法。
另一个要注意的重要事项是调用System.Runtime.InteropServices.Marshal类中的几乎所有内容。有各种各样的方法可以让你自己在脚下射击(当然,当你需要它时非常有用)。
答案 2 :(得分:4)
假设安全代码没有COM组件,P / Invoke等,应该没有语义差异,但性能可能会受到影响。考虑一下:64位以下的内存越多,但引用越大。赢了一些,输了一些。
无论如何,这里有一些有用的参考资料:
“[...]考虑一个.NET应用程序 这是100%类型安全的代码。在这 情景可以带你的 您运行的.NET可执行文件 32位机器并将其移动到 64位系统,让它运行 成功。为什么这样做? 由于组装是100%类型安全 我们知道没有依赖关系 在本机代码或COM对象上 没有“不安全”的代码意味着 应用程序完全运行 在CLR的控制下。 CLR 保证二进制代码 这是由于生成的结果 即时(JIT)编译将是 在32位和64位之间有所不同, 执行的代码都是 语义相同。 [...]“