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的执行的更多相关文章

  1. step6----->往工程中添加spring boot项目------->修改pom.xml使得我的project是基于spring boot的,而非直接基于spring framework

    文章内容概述: spring项目组其实有多个projects,如spring IO platform用于管理external dependencies的版本,通过定义BOM(bill of mater ...

  2. 在Apworks数据服务中使用基于Entity Framework Core的仓储(Repository)实现

    <在ASP.NET Core中使用Apworks快速开发数据服务>一文中,我介绍了如何使用Apworks框架的数据服务来快速构建用于查询和管理数据模型的RESTful API,通过该文的介 ...

  3. SQL 禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项

    注:本文摘自:http://blog.csdn.net/heshengfen123/article/details/3597125 在执行SQL脚本过程中如果出现 禁止在 .NET Framework ...

  4. 学习Entity Framework 中的Code First

    这是上周就写好的文章,是在公司浩哥的建议下写的,本来是部门里面分享求创新用的,这里贴出来分享给大家. 最近在对MVC的学习过程中,接触到了Code First这种新的设计模式,感觉很新颖,并且也体验到 ...

  5. 转载:学习Entity Framework 中的Code First

    看完觉得不错,适合作为学习资料,就转载过来了 原文链接:http://www.cnblogs.com/Wayou/archive/2012/09/20/EF_CodeFirst.html 这是上周就写 ...

  6. CefSharp基于.Net Framework 4.0 框架编译

    CefSharp基于.Net Framework 4.0 框架编译 本次源码使用的是Github上CefSharp官方的79版本源码 准备 IDE Visual Studio 2017 Enterpr ...

  7. Entity Framework 教程——Entity Framework中的实体类型

    Entity Framework中的实体类型 : 在之前的章节中我们介绍过从已有的数据库中创建EDM,它包含数据库中每个表所对应的实体.在EF 5.0/6.0中,存在POCO 实体和动态代理实体两种. ...

  8. Apworks框架实战(六):使用基于Entity Framework的仓储基础结构

    在前面的章节中,我们已经设计了一个简单的领域模型,接下来我们希望能够实现领域模型的持久化及查询.在Apworks中,实现了面向Entity Framework.NHibernate以及MongoDB的 ...

  9. 基于Entity Framework 6的框架Nido Framework

    随着 Entity Framework 最新主版本 EF6 的推出,Microsoft 对象关系映射 (ORM) 工具达到了新的专业高度,与久负盛名的 .NET ORM 工具相比已不再是门外汉. EF ...

随机推荐

  1. leetcode 题解 || Longest Common Prefix 问题

    problem: Write a function to find the longest common prefix string amongst an array of strings. 寻找 0 ...

  2. 在GitHub上使用Hexo搭建静态博客

    搭建静态博客须要一个前提是电脑上有安装git而且有github帐号,这个不懂能够看廖雪峰先生的git教程 1.下载nodejs.在官网上能够下载 2.使用git进入你新建的一个目录,输入命令 npm ...

  3. 如何比较Keras, TensorLayer, TFLearn ?——如果只是想玩玩深度学习,想快速上手 -- Keras 如果工作中需要解决内部问题,想快速见效果 -- TFLearn 或者 Tensorlayer 如果正式发布的产品和业务,自己设计网络模型,需要持续开发和维护 -- Tensorlayer

    转自:https://www.zhihu.com/question/50030898/answer/235137938 如何比较Keras, TensorLayer, TFLearn ? 这三个库主要 ...

  4. NOIP卡常数技巧

    NOIP卡常数技巧 https://blog.csdn.net/a1351937368/article/details/78162078 http://www.mamicode.com/info-de ...

  5. VisualStudio UnitTest FrameWork

    当创建单元测试时,Microsoft.VisualStudio.TestTools.UnitTesting的名字控件会添加到测试项目中,该名字控件中包含很多有用的类: 断言类:在单元测试中验证条件 初 ...

  6. HTML&CSS——使用DIV和CSS完成网站首页重构

    1.DIV 相关的技术 Div 它是一个 html 标签,一个块级元素(单独显示一行).它单独使用没有任何意义,必须结合CSS来使用.它主要用于页面的布局. Span 它是一个 html 标签,一个内 ...

  7. asp.net 连接字符串的多种写法

    一.使用OleDbConnection对象连接OLE DB数据源 1.连接Access 数据库 Access 2000: “provider=Microsoft.Jet.Oledb.3.5;Data ...

  8. 阿里云ecs : Couldn't connect to host, port: smtp.aliyun.com, 25; timeout -1;

    上传到服务器后javamail发邮件异常 链接 原来是ECS基于安全考虑,禁用了端口25. 改成465就可以发邮件了. p.setProperty("mail.smtp.socketFact ...

  9. HOJ 1867 经理的烦恼 【 树状数组 】

    题意:给出一个区间,求这个区间里面素数的个数 这道题wa了好多次---是因为add操作没有写对 每次更新的时候,应该先判断没有加上y是不是质数,加上了y是不是质数 如果从质数变成不是质数,那么add( ...

  10. C语言-100加减求和

    ----------------------------度娘的思路------------------------------------------------------ Action() { / ...