.NET CLR
文章平均质量分 93
偏.NET/C#原理底层一些的知识
郭麻花
坚持原创,坚持理论与实践相结合,持续分享软件工程技术
展开
-
你知道什么是IDisposable的最佳实现吗
最近写代码遇到了一个code smellCA1063: Implement IDisposable correctly提示我应该正确实现Dispose模式。什么是IDisposable接口的最佳实现呢?GC过程到底有哪些需要我们注意细节?让我们一起来认识一下C# CLR的内存管理机制与GC原理。......原创 2022-08-13 11:06:13 · 902 阅读 · 0 评论 -
C# 中Hashtable 源码详解
HashTable并不是泛型类型,使用object类型会给值类型带来装箱拆箱的压力。 构造函数 HashTable内部维护了一个桶数组,一个桶可以保存一组键值对。 桶数组在初始化时,容量并不一定等于传入的capacity值, 而是会选择一个小于该值的最大质数作为数组大小。 同样的,在进行扩容时,也是先按目前大小×2,然后选择一个小于该结果的最大质数作为新数组容量。 为什么哈希表的大小要用质数呢? 主要是因为一般采用模运算来获取元素存放地址:index = hashcode % length。.原创 2021-10-13 08:42:18 · 567 阅读 · 1 评论 -
C# 中Dictionary源码详解
Dictionary 上篇文章介绍了HashTable的实现原理,Dictionary与其大不相同。 Dictionary使用拉链法解决哈希冲突,HashTable使用Double Hash。 Dictionary是泛型类型,对于值类型和引用类型的key,Hash比较器是不同的。 Dictionary再resize的时候可能会使用新的随机Hash比较器。 构造函数 Dictionary内部维护了两个非常重要的数组,它们是拉链法的实现基础。 private int[]? _buckets; p.原创 2021-10-13 14:58:52 · 802 阅读 · 0 评论 -
C# 值类型与引用类型 实现原理与差异
简介 谈起值类型和引用类型的区别和用法,我们并不陌生。你首先想到的也许会是: 值类型分配在栈上,引用类型分配在堆上。 值类型在传递时是传递内容的副本,引用类型则传递的是对象的引用。 值类型包括int,float等基元类型,以及struct;引用类型则包括类,接口,数组,委托,以及我们常用的string等。 不过,这些并不是全部。让我们从两种类型的存储结构,分配与回收,CLR实现细节,以...原创 2019-10-05 19:07:43 · 521 阅读 · 1 评论