随笔分类 - C# CLR
摘要:class Program { static void Main(string[] args) { var s = typeof(SendMsgResultCodes).GetIntsFromEnum(); var a =...
阅读全文
摘要:class Program { static void Main(string[] args) { Color color = Color.Red; Console.WriteLine(color.ToString()); Console.WriteLine(color.ToString("G"));//Red Console.WriteLine(color.ToString("D"));//十进制数值 Console.WriteLine(co...
阅读全文
摘要:CLR非异步操作读取文件的过程图非异步操作主要是因为每次请求硬件如(硬盘,网卡等)的线程都处于阻塞状态,导致以后的请求都需要重新创建新的线程。导致线程上下文的切换频繁。异步IO操作主要是通过每次的请求完硬件创造好IRP,线程就会返回到线程池中,将来硬件完成任务时,会主动去线程池中找线程来继续完成的操作。这样返回到线程池的线程就可以去做自己的事情了。可以使用一个去本市旅游乘车的例子来说明:可以请一班车,送到旅游地方,车该去哪里去哪里,回去的时间给公交公司打电话,来一辆车,这样不用让来的那个车在旅游地点一直等着,造成资源的浪费。下面是使用IO异步操作的一个实例{m_pipe.BeginRead(d
阅读全文
摘要:线程基础进程是一个应用程序实例要使用资源的集合。无法与windows内核的数据和代码沟通,维持系统的健壮性。线程是一个虚拟的cpu,防止和其他的程序混在一起,最终是操作系统瘫痪掉。线程的要素:线程内核对象、线程环境块、用户模式栈、内核模式栈、Dll线程链接和线程分离通知。A、线程内核对象:每个线程初始化时都带有这种数据结构。数据结构包括描述线程的属性和线程上下文(上下文是内存块,主要包含CPU的寄存器集合,寄存器是cpu的组成部分,可以用来暂存指令,数据和地址。)B、线程环境块:是在用户模式中分配和初始化的内存块(内存是是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据)C、用
阅读全文
摘要:一、CLR执行模型1.1从代码到程序集CLR执行的模型是从代码开始,经过编译器生成托管模块,默认情况下可以让多个托管模块和资源生成程序集。下图为其大致过程。1.2执行程序集当系统运行托管模块时会检查文件头,判断启用一个32位的进程还是64位的,然后会在其进程中加载对应的MsCorEE.dll,里面有...
阅读全文