c# - 在编译 C# 应用程序时设置平台有什么不同吗?

标签 c# optimization jit compiler-optimization cil

在VS2012(以及之前的版本...)中,您可以在构建项目时指定目标平台。不过,我的理解是 C# 被“编译”为 CIL,然后在主机系统上运行时进行 JIT 编译。

这是否意味着指定目标平台的唯一原因是故意限制用户在某些架构上运行软件或强制应用程序在 64 位机器上以 32 位运行?我看不出这与优化有关,因为我猜这发生在 CIL-->Native 阶段,它在主机架构上即时发生?

This MS Link似乎没有提供任何替代解释,我找不到任何关于你应该发布同一应用程序的单独 32/64 位版本的建议 - 为“anycpu”编译的东西应该只运行似乎合乎逻辑同样,优化将在 JIT 阶段应用。

最佳答案

Does this mean that the only reasons for specifying a target platform are to deliberately restrict users from running the software on certain architectures or to force the application to run as 32 bit on a 64 bit machine?

是的,如果您将 native 代码与托管代码混合使用,这一点至关重要。但是,它不会改变在运行时优化的内容。

如果您的代码是 100% 托管的,那么 AnyCPU(或新的 AnyCPU Prefer 32 位)可能没问题。编译器优化将是相同的,JIT 将根据当前执行平台在运行时进行优化。

I can find no suggestion of the fact that you should, for example, release separate 32 / 64 bit versions of the same application

除非您与非托管代码执行互操作,否则没有理由这样做,在这种情况下,这将需要单独的 32 位和 64 位 DLL。

关于c# - 在编译 C# 应用程序时设置平台有什么不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12788162/

相关文章:

c# - 为 LuaInterface 构建 Lua 模块

objective-c - ios 8 iPhone 6/6+ 中的 UI 元素模糊

java - Java中的JIT编译是如何将动态编译好的指令加载到内存中的?

c# - Datagridview新行消失

c# - Selenium 在特定的 div 标记后单击其他 div(在 Xpath 中指定)

c# - 具有条件 AND、OR 和 NOT 过滤器的 Linq PredicateBuilder

检查函数内部与外部的值?

python - 优化此 python 代码

xamarin.ios - iOS App Store ExecutionEngineException尝试JIT编译

JavaScript 即时编译