Hello World基于.net framework中CLR的执行
static void Main(string[] args)
{
Console.WriteLine("Hello,World!");
Console.WriteLine("Hello,World!");
}
一个很简单的Hello World程序在.net framework平台究竟是如何在计算机上运行的呢?
下面我将简单解答一下这个问题:
首先介绍CLR(公共语言运行时),CLR是一个可有多种编程语言使用的“运行时”,CLR的核心功能(例如内存管理、程序集加载、安全性、异常处理和线程同步)可以供支持CLR的编程语言所使用。CLR并不在意何种编程语言来写程序,只要编译器是面向CLR的。
我们所写的这个简单的C#程序在C#编译器的作用下是面向CLR的,当程序编译时,C#源代码首先通过C#编译器被执行为托管模板(IL和元数据)。
IL是中间语言,无论何种编程语言都会先转换为IL再通过转换成为机器指令控制CPU的运行,从而实现程序的运行。
元数据包括了源代码中定义的类型和成员以及源代码引用的类型和成员。
using System;
大多程序初始添加了一些常用的程序集,例如上面的using System。
程序集简单理解可以是多个托管模板和资源文件合并起来的一个文件。
在Main方法执行前,CLR会检测出Main代码引用的所有类型。这时CLR会分配一个内部数据结构来管理对引用类型的访问,此程序中引用了一个Console类型,在这个内部数据结构,Console类型的每一个方法都有一个地址,当我们调用WriteLine方法时会进行寻址。之后在CLR的作用下从元数据中取出该方法的IL,经由一个叫做JIT编译器的东东便可编译为本机CPU指令从而由计算机执行程序。在第二次执行Console.WriteLine时并不需经由JIT编译,这对于方法重复度高的程序来说可以节省性能。
这就是在面向CLR时编译、运行的基本思路。
Hello World基于.net framework中CLR的执行的更多相关文章
- step6----->往工程中添加spring boot项目------->修改pom.xml使得我的project是基于spring boot的,而非直接基于spring framework
文章内容概述: spring项目组其实有多个projects,如spring IO platform用于管理external dependencies的版本,通过定义BOM(bill of mater ...
- 在Apworks数据服务中使用基于Entity Framework Core的仓储(Repository)实现
<在ASP.NET Core中使用Apworks快速开发数据服务>一文中,我介绍了如何使用Apworks框架的数据服务来快速构建用于查询和管理数据模型的RESTful API,通过该文的介 ...
- SQL 禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项
注:本文摘自:http://blog.csdn.net/heshengfen123/article/details/3597125 在执行SQL脚本过程中如果出现 禁止在 .NET Framework ...
- 学习Entity Framework 中的Code First
这是上周就写好的文章,是在公司浩哥的建议下写的,本来是部门里面分享求创新用的,这里贴出来分享给大家. 最近在对MVC的学习过程中,接触到了Code First这种新的设计模式,感觉很新颖,并且也体验到 ...
- 转载:学习Entity Framework 中的Code First
看完觉得不错,适合作为学习资料,就转载过来了 原文链接:http://www.cnblogs.com/Wayou/archive/2012/09/20/EF_CodeFirst.html 这是上周就写 ...
- CefSharp基于.Net Framework 4.0 框架编译
CefSharp基于.Net Framework 4.0 框架编译 本次源码使用的是Github上CefSharp官方的79版本源码 准备 IDE Visual Studio 2017 Enterpr ...
- Entity Framework 教程——Entity Framework中的实体类型
Entity Framework中的实体类型 : 在之前的章节中我们介绍过从已有的数据库中创建EDM,它包含数据库中每个表所对应的实体.在EF 5.0/6.0中,存在POCO 实体和动态代理实体两种. ...
- Apworks框架实战(六):使用基于Entity Framework的仓储基础结构
在前面的章节中,我们已经设计了一个简单的领域模型,接下来我们希望能够实现领域模型的持久化及查询.在Apworks中,实现了面向Entity Framework.NHibernate以及MongoDB的 ...
- 基于Entity Framework 6的框架Nido Framework
随着 Entity Framework 最新主版本 EF6 的推出,Microsoft 对象关系映射 (ORM) 工具达到了新的专业高度,与久负盛名的 .NET ORM 工具相比已不再是门外汉. EF ...
随机推荐
- iOS-MBProgressHUD使用
在码代码过程中,我们经常用到MBProgressHUD,但我很少实例化使用,一般都是偷个懒直接显示隐藏,这里贴上详解,以便日后有样式要求时使用. 1,MBProgressHUD常用属性和用法Demo ...
- ThinkPHP5.0框架开发--第11章 TP5.0 杂项
ThinkPHP5.0框架开发--第11章 TP5.0 杂项 第11章 TP5.0 杂项 =============================================== 今日学习 1. ...
- Mysql实战45讲 05讲深入浅出索引(下)极客时间 读书笔记
极客时间 Mysql实战45讲 04讲深入浅出索引(下)极客时间 笔记体会: 回表:回到主键索引树搜索的过程,称为回表覆盖索引:某索引已经覆盖了查询需求,称为覆盖索引,例如:select ID fro ...
- JavaScript学习记录一
title: JavaScript学习记录一 toc: true date: 2018-09-11 18:26:52 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...
- BZOJ 2179 FFT模板
思路:FFT板子题 //By SiriusRen #include <cstdio> #include <complex> using namespace std; typed ...
- Homebrew的安装及使用
Homebrew是Mac上的软件包管理工具,能在Mac中方便的搜索安装卸载软件. 1 安装 在终端输入一下代码,回车,即可下载. ruby -e "$(curl -fsSL https:/ ...
- SpringBoot(三) SpringBoot中的日志配置
SLF4J Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logb ...
- 还是bib问题
虽然昨天把添加bib的基本问题解决了,但是bib的参考文献没有了中括号.查了一下华东师大,只是给出了如何去掉中括号的方法. http://math.ecnu.edu.cn/~latex/doc.htm ...
- 51nod 1268 和为K的组合 dfs
题目: 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使他们的和为K.如果可以,输出:& ...
- Matlab从入门到精通 Chapter5 数据可视化--
5-1 图形绘制示例 >> x2=-17:0.02:3; >> y2=1./((x2+3).^2+1)+1./((x2+9).^2+4)+5; >> subplot ...