我想知道.NET模式x86和x64之间的区别。
1. 两个模式有什么区别?
2. 我可以编译我的库,例如使用.NET x64和.NET x86吗?
3. 如果我选择x64而不是x86,对我是否有任何影响?
4. .NET x64的优势是什么?
5. 如果我想使用.NET x64,我需要安装特殊的东西吗?
问题比较复杂,我会尽量简单化:
任何 .Net 应用程序都可以一次编译为 x86(32 位)和 x64(64 位)。实际上,默认情况下就是这样。您可以通过在项目属性的构建选项卡中更改目标 CPU 来更改此设置。支持的目标包括 "Any"(将根据操作系统支持 JIT 即时编译到 32 或 64 位),"x86" 将编译为可在所有平台上运行的 32 位,而 "x64" 则编译为只能在 64 位平台上运行的 64 位。
是的,请参见上面。还要注意,有时会执行第二级编译,即 NGEN。它为特定的 CPU 类型创建本机映像。但是,如果您已经深入研究了这个领域,就应该知道这点。
对于 .dll 文件,请选择它们的“Any”CPU。对于 .EXE(入口点),您必须选择 Any、x86 或 x64。需要考虑一些事情:使用 x86 的 .Net 应用程序访问本机 Windows .dll 文件(interpo)需要 x86 .dll 文件。因此,64 位应用程序无法访问 32 位 API 调用,反之亦然。这通常是 .Net 应用程序在 64 位操作系统上失败的原因。解决方法是引用正确的 .dll 或者在属性下直接将 .Net 应用程序设置为 x86(32 位)。如果所有其他依赖项都设置为“Any”,则它们将在 JIT 编译时自动变为 32 位。
64 位的优点比较复杂。根据您的应用程序有不同的优缺点。最明显的优势是您的应用程序可以突破 2GB 内存限制。缺点如 #3 所述,如果您引用了 64 位的 .dll,则您的应用程序无法在 32 位操作系统上执行。
一切都是开箱即用的。不要担心任何事情,除了上面提到的所有内容。:)