CLR via C# 读书笔记1-5

《CLR via C#》CLR基础 CLR是公共语言运行库(Common Language Runtime),又叫公共语言运行时。CLR和Java虚拟机一样也是一个运行时环境,是一个可由多种编程语言使用的运行环境,可由面向CLR的所有语言使用。它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间必要的分离。 .NET框架是一种以CLR为基础、支持多种语言(C#、F#、VB.NET、C++、Python等)的开发的软件... 阅读详情

本地代码生成器: NGen.exe

NGen.exe 能把 IL 代码变异为本地代码,这使得在运行时 CLR 的 JIT 编译器不需要在运行时编译 IL 代码从而提高运行效率。NGen.exe 适用以下两个场景:
■ 提高程序的启动速度
■ 降低程序的 working set (当你的程序集会被多个进程适用的时候) 
NGen.exe 有这个作用的原因是它把编译后的本地代码存放在一个独立文件中,而这个文件可以被内存映射到多个进程的地址空间中,这些进程可以共用一份代码,而不需要各自搞一份。

NGen.exe 把生成的本地代码文件存放在类似 %SystemRoot%\Assembly\NativeImages_v4.0.#####_64 的目录中,目录名包含了 CLR 的版本号以及 32-bit 或 64-bit 信息。每当 CLR 载入一个程序集时,他总是检查是否有对应版本的被 NGen 过的本地文件存在,如果不存在 CLR JIT 编译器照常介入,反之 CLR 使用这些变异过的代码。

但是NGen 也有以下的缺点:
■ NGen 生成的文件无法脱离包含 IL 文件独立运行,因为他需要metadata。另外某些情况下(见后文) CLR 无法使用 NGen 生成的文件,JIT 编译器还是需要 IL 代码。
■ NGen 生成后文件后,原程序或环境发生了变更,造成不同步。例如:

• CLR 版本:升级或打补丁
• CPU 类型:硬件升级
• Windows 操作系统版本:升级或打补丁
• 程序集标示号 ssembly’s identity module version ID (MVID):重新编译
• 参照的程序集版本标示:参照程序集被重新编译
• 安全:安全策略变更(比如: declarative inheritance, declarative ink-time, SkipVerification, 或 UnmanagedCode 权限)

小提示: NGen.exe 可以运行在 update 模式中,在这种模式下,已经被 NGen 处理过的文件会被及时更新,并保持同步。

之前的文章中提到过NGen.exe 因为无法获晓代码运行时的系统环境,所以无法做到 JIT compiler 那样生成高优化率的指令,有些情况下它生成的代码要比通过 JIT 编译器执行的方式慢5%左右。

通常来说 server 端的程序,适用 NGen.exe 意义不大,因为仅仅首次的客户请求得到优化,而且由于大多数server 端的程序仅一个实例,所以降低 working set 消耗的特性也享受不到。
对于客户端的程序,NGen.exe 通常能改善启动时间,降低 working set 消耗。而且如果该程序的所有模块都被 NGen.exe 生成过本地代码, CLR 就完全不需要载入 JIT 编译器。

对于启动时间过长的胖客户端的程序,Microsoft 提供一个名为 Managed Profile Guided Optimization tool (MPGO.exe)。这个工具能分析程序启动时的执行情况,并提供信息给 NGen.exe, 从而使其生成的更好的本地代码,从而进一步提高启动速度。

NET CLR via C#(中文第4版)-完整版-5 CLR via C# (中文第4版) 完整版-第四卷,共5卷,请在点击上传作者账户资源进行完整下载(csdn最大只能传70MB的文件) 立即下载

相关推荐

EPSON RX8010SJ RTC实战:I2C寄存器配置避坑指南(附完整初始化代码)

本文详细解析了EPSON RX8010SJ RTC芯片在I2C寄存器配置中的常见问题与解决方案,包括TEST位、STOP位和中断控制等关键配置要点。通过实战经验分享和完整的初始化代码模板,帮助开发者避免常见陷阱,确保RTC模块的稳定运行。

weixin_28678831的博客 405

CLR via C# 读书笔记 5-1 何时对托管资源使用Finalize

Finalize方法常用于回收非托管资源,以防止资源泄露 在较少的情况下它也会被用于托管资源 1.构造函数中如果抛出异常, 那么只有Finalize方法才会被执行,在这里可以回收一些已经分配的资源 (Dispose不会被执行!!!)当然:Finalize方法的执行时间还是下一次GC的时候(依然不确定时间) 如果不实现该方法将会造成资源泄露 以下代码演示了在这种情况 代码 usin...

weixin_30709929的博客 92

海康VisionMaster零代码开发实战:从PLC工程师到视觉专家的捷径

本文为PLC工程师提供了利用海康VisionMaster视觉平台实现零代码视觉开发的实战指南。文章详细阐述了如何通过图形化流程设计替代传统编程,快速搭建视觉检测应用,并实现与PLC的无缝通讯,是工程师从设备控制迈向视觉系统集成的有效捷径。

weixin_29201859的博客 293

CLR via C# 3 读书笔记(5):第1章 CLR执行模型 — 1.5 本地代码生成器工具:NGen.exe...

NGen.exe工具(本机映像生成器)随.NET Framework一起发布,用来在客户机上安装应用程序时,将IL代码编译为本地代码。由于代码在安装时已经编译了,运行时JIT编译器就无需再次编译,这可以提升程序性能。 缩短程序启动时间。 减少程序工作区大小。NGen.exe将编译的本地代码保存为一个单独的文件,该文件可同时被多进程地址空间进行内存映射,每个进程不需要单独的拷贝。 ...

weixin_30344795的博客 128

COMSOL+AI实战:5个超实用技巧让你的仿真效率翻倍(附Python代码)

本文详细介绍了如何将人工智能(AI)与COMSOL仿真软件结合,通过Python脚本实现五大实用技巧,包括自动化生成数据集、构建代理模型、集成AI优化算法、利用神经网络加速场量求解以及智能结果分析,从而显著提升多物理场仿真的效率和自动化水平。

weixin_29230865的博客 441

SKF SimPro Quick 4.8.1发布

发布说明可以在SimPro手册的SKF SimPro Quick应用程序的一般部分下找到(帮助→SKF SimPro快速手册→一般→发布说明)。请删除旧版本,请备份您存储在C:\SKF SimPro xxx\files文件夹中的文件以及所有自定义报告模板和表格。我们很高兴地通知您,我们的轴承应用工程软件SKF SimPro Quick 4.8.1可供下载。将新的安装文件下载到本地计算机后,双击它安装向导将打开(按照说明操作)3.安装后,在本地机器上启动SKF SimPro Expert软件。

小韩的博客 1816

CLR via C# 读书笔记目录

一口气写了CLR via C# 两章的笔记,有些内容自己也似懂非懂,有些则觉得很好很强大,所以趁此机会作个目录同时为每篇文章打个评分:  纯理论,无聊 有参考价值,可看 有实用价值,必看 CLR via C# 读书笔记1-1: 托管模块 (Managed Modules)定义 CLR via C# 读书笔记1-2:程序集(Assemblies)定义 CLR via C# 读书笔记1-3

sqlchen的专栏 909

大数据之VIP(Virtual IP,虚拟IP)负载均衡

VIP(Virtual IP,虚拟IP)负载均衡是一种在计算机网络中常用的技术,用于将网络请求流量均匀地分散到多个服务器上,以提高系统的可扩展性、可靠性和性能。

赵玉的专栏 4122

[CLR via C#读书笔记]第一章 CLR执行模型

CLR简介 CLR(Common Language Runtime)是一个可以由多种语言使用的“运行时",它与具体使用哪种语言无关,只要编译器支持CLR,无论选择什么语言,相应编译器都会将代码编译成一个托管模块,即一个标准的32位PE(Portable Executable)文件或64位PE32+文件,该模块需要CLR才能执行。 CLR的主要功能包括(1)内存管理;(2)程序集加载;(

胖子没有错! 1302

通过Netlink检测网线插拔

Android/Linux通过netlink编程检测网线插拔。

阿xin*的嵌入式AI 1035

基于YOLOv10的微小目标检测,多头检测器提升小目标检测精度

引入多头检测器助力YOLOv10,暴力提升小目标检测性能

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2567

NET CLR via C#读书笔记 - 第九章 参数

NET CLR via C#读书笔记 - 第九章 参数1 可选参数和命名参数1.1 代码示例1.2 可选参数以及命名参数的规则和原则2 以引用方式传参3 可变数量的参数 1 可选参数和命名参数 1.1 代码示例   可选参数就是函数包含默认值得形参,命名参数是指调用方法的时候通过指定参数名称来传递实参,代码示例如下: public sealed class Demo{ //定义含有默认参数值的函数 其中x,s就是可选参数 public void dpFunc(int x = 0,string s = "

CreateNewWorld的博客 264

微信电脑版本不会自动下载图片吗?——没有找到解决方法。——只会默认下载doc等文件,图片不行,需要自己另存为——有什么办法解决吗?

微信电脑版本不会自动下载图片吗?——没有找到解决方法。——只会默认下载doc等文件,图片不行,需要自己另存为——有什么办法解决吗?此外,用户还可以选择将接收到的图片、视频和文件保存到指定的文件夹中。‌用户可以在微信设置中调整这一设置。

qq_15963745的博客 5079

《CLR via C#》第八章 读书笔记(未完结

第八章 方法 第一节 实例构造器和类(引用类型) 1、构造器方法在“方法定义元数据表”中始终叫做.ctor(constructor的简称)。创建引用类型实例时,首先为实例的数据字段分配内存,然后初始化对象的附加字段(类型对象指针和同步块索引),最后调用类型的实例构造器来设置对象的初始状态。 2、构造引用类型的对象时,在调用类型的实例构造器之前,为对象分配的内存总是先被归零。 3、实例构造器...

qq_41543031的博客 250

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

《CLR via C#》第五章读书笔记

《CLR via C#》第五章 第五章编译语言的基元类型引用类型和值类型值类型的装箱和拆箱对象哈希码dynamic基元类型 第五章 主要是抽取一些重要的内容,简单的小结 编译语言的基元类型 编译器直接支持的数据类型成为基元类型。 基元类型直接映射到framework类库(FCL)中存在的类型。例如:C#的int直接映射到System.int32类型中。 编译器能够支持基元类型之间的隐式或显示转型。在不会发生数据丢失的情况下,允许隐式转换;反之,对于数据类型转换后会丢失精度或者数量级,C#就要求显示转换。

qq_44762814的博客 445

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

《CLR via C#》读书笔记 之 目录导航

《CLR via C#》读书笔记 之 目录导航 2013-02-27 读书笔记是按书本章节按序写的,只摘录了个人认为比较重要,关系比较紧密的知识点。第4部分 核心机制 和第5部分 线程处理 等有时间再整理 CLR核心功能包括:内存管理,程序集加载,安全性,异常处理,以及线程同步。 第Ⅰ部分 CLR基础 第一章:《CLR via C#》读书笔记 之 CLR执行模型 第二章: 《CLR...

weixin_34319999的博客 64

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

《CLR via C#》读书笔记-CLR寄宿与AppDomain

CLR寄存和AppDomain的简介

郑林的专栏 1382

《CLR via C#》第五章 读书笔记

第五章 基元类型、引用类型和值类型 对第五章内容进行简单的整理、摘要。主要是记录一些对本人来说比较陌生的东西。 第一节 编程语言的基元类型 1、编译器直接支持的数据类型称为基元类型(primitive type)。 2、C#的string关键字直接映射到System.String(一个FCL(Framework类型库)类型)。 3、C#的int始终映射到System.Int32。 ...

qq_41543031的博客 242

NET CLR via C#读书笔记 - 第八章 方法

NET CLR via C#读书笔记 - 第八章 方法1 实例构造器与引用类型(类)2 实例构造器和值类型(结构)3 类型构造器4 操作符重载方法5 转换操作符方法5.1 转换操作符方法描述5.2 转换操作符方法重载6 扩展方法7 分部方法 1 实例构造器与引用类型(类)   ① 构造器是将类型实例初始化为良好状态的特殊方法。   ② 元数据表中名字为.ctor   ③ 创建引用类型时,首先为实例的数据字段分配内存并将分配的内存字节初始化为0,其次初始化附加字段(类型对象指针和同步块索引),最后调用实例构造

CreateNewWorld的博客 329

CLR via c#读书笔记八:泛型

1、定义泛型类型或方法时,为类型指定的任何变量(比如T)都称为类型参数。使用泛型类型或方法时指定的具体数据类型称为类型实参。 2、System.Collections.Concurrent命名空间提供了线程安全的泛型集合类。Microsoft建议使用泛型集合类,不建议使用非泛型集合类。 3、具有泛型类型参数的类型称为开放类型,CLR禁止构造开放类型的任何实例。这类似于CLR禁止构造接...

218
上一篇: CLR via C# 读书笔记1-4 追记
下一篇: CLR via C# 读书笔记1-6
sqlchen
博客等级 码龄24年 10粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值