- 博客(5)
- 资源 (24)
- 收藏
- 关注
原创 【CLR】.NET的GC垃圾回收
垃圾回收算法引用计数法:堆上的每个对象都维护了一个内存字段用来记录有多少个对象引用了自己,当这个字段的值变成0时,就意味着自己没有用了,可以被回收走了。当下一个GC周期到来时,他就会被回收走。这种算法存在因循环引用导致无法回收的问题。引用跟踪法:所有引用类型的变量都称作根。然后查看此根都引用了哪些对象,然后看这个对象里又有哪些根,这些根又引用了哪些对象。以此类推,这么一来就可以构建一个个引用跟踪图,这些树上的对象的同步块索引的某一位就标记为1。引用跟踪法回收流程除了回收线程之外,暂停其它所有线
2021-02-14 19:35:15 838
原创 【CLR】数据类型与装箱、拆箱
类型有:基元类型(int、long、bool等编译器直接支持的类型)、值类型、引用类型。所有的类型都派生自System.Object当我们new一个对象时,new操作实际做了这些事情:计算当前类型及其所有父类,一直计算到System.Object,中定义的所有实例字段需要的字节数,这些实例字段的“类型对象指针”和“同步块索引”对象所需要的字节数。从堆中分配这些字节,并初始化为0初始化类型对象指针和同步块索引调用类的构造函数类型对象指针:当我们想查看某个对象是属于什么类型时,一般会调用Get
2021-02-14 15:34:24 337
原创 【CLR】程序集查找与GAC
版本号如图:AssemblyVersion程序集版本号:存储在AssemblyDef清单元数据表中,虽然在文件属性面板中不显示,但是这个版本号对于CLR来说很重要,绑定强明明程序集时会用到这个,它唯一地标识了程序集。当A程序集引用了B程序集时,会将B程序集的AssemblyVersion嵌入到自己的AssemblyDef清单中,这样当CLR加载B的时候,就能准确的知道是程序集B的哪个版本。AssemblyFileVersion文件版本号:即属性面板中的文件版本,存储在Win32版本资源中,这个号仅
2021-02-13 21:49:32 488
原创 【CLR】JIT和NGen
JIT的工作流程JIT(Just in time)即时编译器:在执行时负责把编译生成的IL代码转换成本机代码(CPU指令)。对于以下代码来说:void Main(){ Console.WriteLine("hello"); Console.WriteLine("word");}当执行Main方法时,CLR会检测Main所使用到的类型,并分配一个数据结构用来存储对这些类型的访问。这段代码里只涉及到了Console类,所以Console类的所有方法都被存到了那个数据结构里,每个方法都是一个记录项
2021-02-06 18:16:29 398
原创 【C#】winform安全的跨线程访问控件
很多winform开发的新人,在子线程(非UI线程,线程id不为1)要更新控件的text属性时经常会遇到不允许跨线程访问控件的异常:Cross-thread operation not valid. Control “” accessed from a thread other than the thread it was created on。那么在这篇文章里就总结下如何该正确的跨进程访问控件。如果你从一个不同的线程要访问控件(包括Form),则必须调用控件的这四个方法Invoke、BeginInvo
2021-02-05 18:18:29 3740
winfrom可拖动控件位置和大小
2017-08-31
SnapsToDevicePixels与UseLayoutRounding的比较
2017-08-22
NotificationDemoWPF自定义通知窗体样式
2017-08-18
18000-6C协议(全英文版)
2015-05-21
人月神话 pdf中文版
2011-11-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人