zoukankan      html  css  js  c++  java
  • C#学习系列-.NET体系结构

    .NET框架概述

    .NET 框架为.NET应用程序运行提供虚拟机环境,为.NET应用程序提供编译、运行、内存管理、垃圾回收、安全等服务。

    .NET框架组成部分

    1.公共语言运行时(Common Language Runtime,CLR)

    2.NET框架类库(并非.NET框架中的所有类库代码都是纯粹的托管代码编写的,.NET框架中有相当数量的类是对Win32 API的封装)

    托管代码

    使用.NET公共语言运行时提供的代码,反之为非托管代码(如 Win32 API)

    通用语言组织框架(CLI Common Language Infrastructure)

    规定如何在运行库中声明、使用和管理类型,同时也是运行库支持跨语言互操作的一个重要组成部分

    1.建立一个支持跨语言集成、类型安全和高性能代码执行的框架

    2.提供一个支持完整实现多种编程语言的面向对象模型

    3.定义各个语言必须遵守的规则,有助于确保用不同语言编写的对象能够交互作用

    公共语言运行时(CLR)

    负责管理.NET应用程序编译、运行、代码类型安全检查、内存分配、线程管理、安全、垃圾回收等服务,为.NET应用程序提供一个虚拟的运行环境

    通用类型系统(CTS Common Type System)

    CTS定义了一个类型库,无论是VB还是C#,他们的数据类型都是一致的,因此.NET将各种不同的编程语言的数据类型进行抽象,就诞生了CTS。

    CTS类型主要分为:值类型和引用类型 http://wenku.baidu.com/link?url=LHBzlpJ8zHnLvsNzcmGxjpGgOolfq721gDvoVTY7gtNHTUbmhf_Zv8z0GliZECRuyg020kqZhZEtWVawStyqJZGxAFoDSMvva411vNACau7

    公共语言规范(CLS Common Language Specification)

    CLS是CTS的子集,目标是让.NET平台上用不同的编程语言编写的对象之间可以互相调用

    CTS、CLR、CLS 三者关系如下:

    值类型:存储在内存的堆栈中,快速访问,超出作用范围自动释放内存,垃圾回收机制不参与回收。

    引用类型:分配在内存中,默认NULL ,在栈中分配内存的地址,操作时通过指针寻找,通过垃圾回收机制回收。将一个引用类型变量的内容赋值给另一个引用类型的变量时,只是变量的内存地址被拷贝。

    装箱:将值类型转换成引用类型 int i=0; object o=i;

    拆箱:将引用类型转换为值类型 int i=0;object o=i;int j=(int)o;

    装箱和拆箱对性能损耗是有影响的。

    即时编译(JIT)

    1. 在编译期:CLR对C#代码进行一次编译,生成中间代码DLL或者EXE。
    2. 在运行期,CLR根据硬件环境使用JIT(即时编译引擎),将中间代码编译为二进制代码并执行。
    3. 编译好的二进制代码被存放到一个缓存区缓存,下次调用相同的代码就直接从缓存区中调用,也就是说相同的代码只会编译一次。

    NGEN(本机映像生成器)编译

    本机映像生成器(Ngen.exe)是一个提高托管应用程序性能的工具。Ngen.exe创建本机映像(包含经编译的特定于处理器的机器代码的文件),并将它们安装到本地计算机上的本机映像缓存中。运行库可从缓存中使用本机映像,而不是使用实时编译器编译原始程序集。

    中间语言(MSIL 现在称为CIL Common Intermediate Language)

    参考《C#4.0权威指南》

    作者:释迦苦僧
    出处:http://www.cnblogs.com/woxpp
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
    生活不易,五行缺金,求打点
  • 相关阅读:
    Kubernetes集群管理工具kubectl命令技巧大全
    LVM 逻辑卷扩容
    制作 Ubuntu 16.04 离线apt源
    Kubernetes 存储简介
    处理K8S PVC删除后pod报错
    处理 K8S Orphaned pod found
    Kubernetes之GlusterFS集群文件系统高可用安装,提供动态卷存储
    Linux安装MYSQL并部署主从复制集群
    CentOS 7.4通过rpm包离线安装 Mysql8.0并部署主从复制(附从库备份脚本)
    容器化安装Mysql 8.0 并部署主从复制
  • 原文地址:https://www.cnblogs.com/woxpp/p/3904854.html
Copyright © 2011-2022 走看看