|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
简单的说:.net只有微软一家在做的,微软也不允许别人跟他做相同的工具,所以他就把需要的工具全部封装在.net的平台上了;而net网页编程是公开了。用VisualStudio等IDE写C#的HelloWorld十分复杂,但离开了IDE你能不克不及打印出HelloWorld呢?这不是说事情时离开IDE,而是进修一下CLR的实行模子.
HelloWorld
- 新建一个记事本,输出以下代码,另存为HelloWorld.txt.
usingSystem;
namespaceHelloWorld
{
classProgram
{
staticvoidMain(string[]args){
Console.WriteLine("HelloWorld!");
Console.ReadKey();
}
}
}
- 翻开VisualStudio2008(2005,2010)命令提醒程序
- 却换到HelloWorld.txt的目次
- 运转命令:csc/out:Hello.exeHelloWorld.txt
如偶然外,将会编译出Hello.exe,能打印出HelloWorld.
CLR实行模子-编译期
CLR程序的实行历程大抵分为两步,编译期和运转期,编译期历程大抵以下图:
个中编译期逻辑上也可分为两步:
- CLR(C#)编译器承受源代码文件,并编译为托管模块.托管模块包含IL代码,元数据,CLR优等构成部分.下面的例子中就是将HelloWorld.txt编译成托管模块.
- 一样平常程序集城市包括良多源代码文件(这里只要HelloWorld.txt)和资本文件,第二步就是把各个源代码文件和资本文件对应编译了局兼并成程序集.
实行下面两步就能够失掉一个XX.dll或XX.exe的程序集.就像下面的Hello.exe.
编译器怎样晓得要编译成托管模块仍是资本文件?实际上是必需明白告知编译器每一个文件的怎样编译,这个对应VisualStudio的文件属性的天生操纵.
右击任何VisualStudio办理资本计划的文件-->属性-->天生操纵:
指定Class1为嵌进的资本,用ILSpy检察会发明只是把Class1嵌进到程序会合,称号为:定名空间.文件名:
你乃至能够将一张图片设为编译让编译器试图往编译它,不外会报错.
运转期
下面天生了程序集,程序集内的是IL代码,它还不是可运转的代码.IL是与CPU有关的呆板言语.直到程序集被挪用,才会由JIT(Just-in-Time,及时)编译器编译为本机代码(CPU指令).在运转时,CLR实行以下步骤:
- 反省程序集的平安特征;
- 在内存平分配空间;
- 把程序会合的可实行代码发送给JIT编译器,把个中一部分编译本钱机代码(CPU指令).
程序集的可实行代码在必要的时分由JIT编译编译,然后本机代码(CPU指令)就被缓存以备厥后的程序中实行.一旦使用程序停止,编译好的本机代码也会被抛弃.
比方假如将下面的代码改成:- staticvoidMain(string[]args){Console.WriteLine("Hello");Console.WriteLine("World!");Console.ReadKey();}
复制代码 第一个WriteLine必要先JIT编译,再实行.而因为已编译WriteLine的代码,以是第二个WriteLine会间接实行内存块中的代码,跳过JIT编译.
因为分派内存,JIT编译历程等,以是程序会在第一次运转时形成一些功能丧失,写ASP.NET时这类感到特变分明,按了F5会等好久才会显现首页.
上面摹拟感觉这个历程.用一年夜堆类延伸内存分派的工夫,参考这个文件HelloWorld.CSS(博客园不撑持txt格局):
再次运转命令:csc/out:Hello.exeHelloWorld.txt,失掉Hello.exe,实行时发明有必定的提早才会打印出HelloWorld.
天生本机代码
利用.NET供应的NGen.exe,能够将IL代码编译本钱机代码.能够办理下面的成绩.NGen.exe有两个感化:
加速使用程序的启动速率.由于代码已编译为本机代码,运转时不必要再花工夫编译
那做企业软件是不是最好用J2EE? |
|