是否可以将 ASP.NET Web 应用程序编译为机器语言?如果是这样,有什么性能优势吗?
你可以(正如查尔斯在他的回答中所表明的那样),但这样做并没有真正的优势。当用户第一次从您的网站请求某些内容时,IL 代码会编译为字节代码。这称为“及时”编译。执行此步骤后,您网站的两个版本将具有相同的性能。
最后,ASP.NET 应用程序(无论是“ASP.NET Web 应用程序”还是“ASP.NET 网站”)被编译为 IL,然后当使用该 IL 片段时,它会被进一步透明地编译为机器代码通过 .NET 运行时 (CLR)。
性能优势...就在那里:)它比解释型网站等运行得更快。
但是,如果您打算将其程序集 (DLL) 编译为本机格式,以便无法对其进行反汇编,则有一些商业工具可用于混淆和 IL/本机代码替换。
虽然实际上可以使用 www.xenocode.com 等工具从 .net 项目构建后生成 .net 独立的可执行文件,但我不知道这是否适用于 ASP.NET 项目,我也怀疑是否会出现这种情况。首次加载任何资源后是否有真正的性能优势。
如果我没记错的话是可以这样做的。然而,除了学术目的之外,你不应该追求这个想法。没有显着的速度增益。
当您编译 EXE 时,它会被编译为 CIL(通用中间语言)。这是一种独立于平台的格式。当您第一次启动 EXE 时,.NET 框架会将该 EXE 编译为运行应用程序的特定计算机的机器代码。然后将结果缓存起来。这样,只有第一次启动会慢一点,但后续启动会更快。
如果您想要提高速度,特别是对于 Web 应用程序,请投入时间来识别应用程序中的瓶颈,例如数据库查询等。此外,请查看可以在哪里应用缓存。这些是提高性能的更好方法。
这只是我,没有考虑太多。
Web 应用程序需要 Web 服务器才能运行,并且 Web 服务器不读取机器代码,而操作系统会读取机器代码,您可能会认为在 Windows 环境中...
但是,话又说回来...... EXE 已经是机器代码,由 .NET Framework 编译和转换......
所以...o.O
Mono支持AOT编译(编译为机器代码);但您仍然需要保留一些程序集信息,并且其使用存在限制。
请参阅 http://www.mono-project.com/AOT 了解更多信息。