不用IDE写C#的Hello World的方法

2019-12-30 11:06:14于丽

第一个WriteLine需要先JIT编译,再执行.而由于已编译WriteLine的代码,所以第二个WriteLine会直接执行内存块中的代码,跳过JIT编译.

由于分配内存,JIT编译过程等,所以程序会在第一次运行时造成一些性能损失,写ASP.NET时这种感觉特变明显,按了F5会等很久才会显示首页.

下面模拟感受这个过程.用一大堆类延长内存分配的时间,参考这个文件HelloWorld.css(博客园不支持txt格式):

不用IDE写C#的Hello World的方法

再次运行命令:csc /out:Hello.exe HelloWorld.txt,得到Hello.exe,执行时发现有一定的延迟才会打印出Hello World.

生成本机代码

使用.NET提供的NGen.exe,可以将IL代码编译成本机代码.可以解决上面的问题.NGen.exe有两个作用:

加快应用程序的启动速度.因为代码已编译为本机代码,运行时不需要再花时间编译

减少应用程序的程序集.如果一个程序集会同时加载多个进程.NGen.exe会将IL编译成本机代码,并保存到一个单独的文件中.这样就可以通过"内存映射"的方式,同时映射到多个进程中,使代码共享.避免每个进程一份代码.

再次运行Visual Studio 2008(2005,2010) 命令提示程序

运行如下命令:ngen install Hello.exe:

不用IDE写C#的Hello World的方法

命令完成(在我的机器大概要10秒左右,到能再次输入命令才完成)后运行Hello.exe会发现马上就能打印出Hello World,没有任何延迟.

对于ASP.NET,Microsoft另外提供了aspnet_compiler.exe,我们可以在ASP.NET程序建一个脚本(.bat)预编译程序.以下是一个示例(from老赵的程序):

%SYSTEMROOT%Microsoft.NETFrameworkv2.0.50727aspnet_compiler -v / -p .MyMvcDemo.Web.UI -f -errorstack .Compliled

PAUSE

关于aspnet_compiler.exe不多介绍,感兴趣的可以自己搜索相关资料.