今天天气不错,连夜下了场大雨后一切湿漉漉的。是的,我又回来接着写了,我又要看新的书了,怕自己忘记了之前看过的,大概搬运下旧书笔记。一边给新书记笔记,一遍搬运旧的,说不定可以打通任督二脉。
扎个马步:
CLR是每种.NET编程语言都使用的运行库。c#是.net的核心开发语言,.net是一个运行时的平台,CLR是.net框架的底层,CLR全称为:通用语言运行库。.NET编程语言的编译器生成中间语言(Intermediate Language,IL)代码。
CLR(运行库)包括:
①:JIT(即时编译器),他会把IL码生成本地代码。
②:GC(垃圾回收器),负责清理不再引用的托管内存。
③:调试器,允许不同的编程语言之间启动调试会话。
④:线程实用工具,负责在底层平台上创建线程。
WPF,用于创建Windows桌面应用程序。System.Windows名称空间下的所有内容都属于WPF,但System.Windows.Forms除外。在WCF之前的程序间通信,一般有两种。第一种:是ASP.Web.Services和.NET Remoting;第二种:消息队列。
他们的实现一般都用到不同的API。WCF并不能替代前面说到的两种通信技术,它是将前面用到的多种API结合起来到一个API中,使得你可以在一个API中使用多种类似技术。即WCF可以实现remoting和消息队列。当然在wcf实现类似的技术也不会叫原名了。
LINQ(发音"link")的写法就类似SQL。
var students = from student in db.Students where student.Name =="张三" select new{student.Id}
lambda是一种语法糖,优化LINQ语法,LINQ才是实现的技术。有了LINQ和Lambda表达式,就可以使用相同的查询语法来访问对象集合、数据库和XML文件。
LINQ TO SQL和Entity Framework都可以对数据库进行操作,但是Linq书写就比较简单。但是对于更复杂的还是的依赖Framework,因为它更强大。现在你可以在Framework里去使用Linq。
C#是动态集成(动态语言在编译时不会对类型进行检查,而是在运行时识别对象的类型。)脚本语言,使其更容易使用COM集成(COM就是微软的组件对象模型。是由微软推出的一套接口规范,通过设定不同组件之间需要遵守的标准与协议,主要用来跨语言、跨进程之间的模块通信。详情看《COM技术内幕》一书)。C#语法拓展为使用dynamic关键字(dynamic关键字可充当C#类型系统中的动态类型声明。这样,C#就获得了动态功能,同时仍然作为静态类型化语言而存在。用dynamic增强C#泛型表达力)、命名参数和可选参数,以及用泛型增强的协变和逆变。
多核CPU产生了并行编程,任务并行库(Tack Parallel Linrary)使用Tack类(Task类这是一种任务,任务的实现依赖于线程。技术可以粗略理解为任务就是一个线程池,业务上就是做某件事)和Parallel类(parallel([ˈpærəlel])是尽可能的去压榨CPU给自己用)抽象出线程,更容易创建并行运行的代码。
C#使用async和await(async和await要始终保持一致。他们有很多详细的使用)大大简化了异步方法的编程,尤其是在触屏操作界面上使用。C#有一个新的编译器引擎Roslyn(.Net有了Roslyn后C#、VB.net也具备了脚本语言的优点,不用预先编译就能够运行,同时又具备了预编译语言的特性,执行效率更高,著名的跨平台游戏开发引擎unity/unity3D就已经提供了C#作为脚本开发语言的支持,一年揽金百亿的王者荣耀就是基于unity3D引擎开发的)。
Microsoft Silverlight是一个跨浏览器的、跨平台的插件,为网络带来下一代基于.NETFramework的媒体体验和丰富的交互式应用程序。Silverlight是一个Web浏览器插件,支持动态内容。
.NET程序的库和可执行文件成为“程序集(assembly)”。程序集是完全自描述性的,它是一个逻辑单元,这意味着它可以存储在多个文件中(动态程序集存储在内存中,我不是存储在文件中)。程序集的一个重要特征是它们包含的元数据描述了对应代码中定义的类型和方法。
程序集有两种类型:私有程序集和共享程序集。
私有程序集:一般附带在某个软件上,且只能用于该软件。
共享程序集:是其它应用程序可以使用的公共库。
UWP(通用Windows平台)利用Native .NET把IL编译成本地代码。UWP不同于传统pc上的exe应用,也跟只适用于手机端的app有本质区别。它并不是为某一个终端而设计,而是可以在所有windows10设备上运行。简而言之,UWP应用就是win10平板化的软件,win10电脑、平板、手机都可以使用。
在CLR执行应用程序之前,编写好的源代码(使用C#或者其它语言编写的代码)都需要编译。在.NET,编译分为两个阶段:
①将源代码编译为Microsoft中间语言(IL码)。
②:CLR把IL码编译为平台专用的本地代码。IL码仔.NET程序集中可用。运行时,JIT编译器编译IL码,创建特定于平台的本地代码。
即提供了一个IDE给你写源代码,可以是C#或者其它语言。
然后VS执行前CLR会把你写的源代码转成中间语言(IL)码。
最后由CLR中的JIT编译器编译IL码,创建特定平台的代码,如UWP平台。
1、进程和CLR的关系 | ||||||||||||||
一个进程可以只包含一个CLR,也可以包含多个CLR |