Hello World基于.net framework中CLR的执行

1    static void Main(string[] args)
2         {
3             Console.WriteLine("Hello,World!");
4             Console.WriteLine("Hello,World!");
5         }

一个很简单的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时编译、运行的基本思路。

时间: 2024-10-28 07:46:06

Hello World基于.net framework中CLR的执行的相关文章

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

注:本文摘自:http://blog.csdn.net/heshengfen123/article/details/3597125 在执行SQL脚本过程中如果出现 禁止在 .NET Framework 中执行用户代码.启用 "clr enabled" 配置选项的解决办法是: 执行以下脚本: exec sp_configure 'show advanced options', '1';goreconfigure;goexec sp_configure 'clr enabled', '1'

Windows Workflow Foundation技术介绍(基于.NET Framework 4.5)

Windows Workflow Foundation技术介绍(基于.NET Framework 4.5) 转自:http://www.cpiso.cn/jsyj/ghxx/2014/5/15/459.shtml Microsoft Windows Workflow Foundation (WF) 是一个可扩展框架,用于在 Windows 平台上开发工作流解决方案.Windows Workflow Foundation 同时提供了 API 和一些工具,用于开发和执行基于工作流的应用程序.Wind

Entity Framework中IQueryable, IEnumerable, IList的区别

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的SQL以发现问题所在. 使用过Toplink的

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

Entity Framework中的实体类型 : 在之前的章节中我们介绍过从已有的数据库中创建EDM,它包含数据库中每个表所对应的实体.在EF 5.0/6.0中,存在POCO 实体和动态代理实体两种. POCO Entity (Plain Old CLR Object): POCO类是不依赖任何框架的类型,如同其他正常的一般类型,我们称之为"Plain Old CLR Objects"(这里不知道怎么翻译,普通的CLR对象?古老的CLR对象?大概意思就是没有什么特殊的对象吧). POC

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

在前面的章节中,我们已经设计了一个简单的领域模型,接下来我们希望能够实现领域模型的持久化及查询.在Apworks中,实现了面向Entity Framework.NHibernate以及MongoDB的仓储基础结构.在本章节中,我将向大家介绍如何在Apworks中使用基于Entity Framework的仓储机制. 搭建基于Entity Framework的基础结构 在使用Apworks提供的仓储服务之前,我们首先需要搭建好基于Entity Framework的基础结构,以便接下来的Apworks

C#、.NET Framework、CLR的关系

C#..NET Framework.CLR的关系 很多人没有将C#..NET Framework(.NET框架).CLR(Common Language Runtime,公共语言运行库)这三者之间的关系区分清楚,认为其版本号是一一对应的.其实不然,.NET框架是一个独立发布的软件包,其包含了CLR.类库以及相关的语言编辑器等工具.C#代码经过编译之后在CLR环境中运行.由于.NET框架3.0/3.5其实是.NET2.0的扩展(只是增加了一些新的程序集),所以.NET3.0/3.5的CLR版本还是

创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表

创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添加一个User类: namespace MyFirstApp.Models { public class User { public int ID { get; set; } public string Name { get; set; } public string Email { get; se

[JavaEE - JPA] 3. Spring Framework中的事务管理

前文讨论了事务划分(Transaction Demarcation)在EJB中是如何实现的,本文继续介绍在Spring Framework中是如何完成事务划分的. 我们已经知道了当采用Container事务类型的时候,事务划分主要有以下两种方案(参考这里): 使用JTA接口在应用中编码完成显式划分 在容器的帮助下完成自动划分 在使用JavaEE的EJB规范时,这两种方案分别被实现为BMT以及CMT,关于BMT和CMT在上一篇文章中有比较详尽的讨论(参考这里). 那么对于Spring Framew

如何使用 Docker 部署一个基于 Play Framework 的 Scala Web 应用?

本文作者 Jacek Laskowski 拥有近20年的应用程序开发经验,现 CodiLime 的软件开发团队 Leader,曾从 IBM 取得多种资格认证.在这篇博文中,Jacek 分享了 Warsaw Scala Enthusiasts Meetup 上 Rafal Krzewski 介绍的一个 Docker sbt 插件.本文系 OneAPM 工程师编译整理: 虽然在 DeepSense.io 项目中,Docker 已得到了非常深入的应用,但是如果没有接触到 Rafal Krzewski