![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c#底层探索
文章平均质量分 83
阿鹏哥哥01
这个作者很懒,什么都没留下…
展开
-
dotNET 高阶反射(RTTI):.NET 程序集反编译函数为 IL 代码
我们知道在 “反射” 的应用中是可以在运行时 “动态的即时编译IL”(.NET Emit ≈≈≈ C/C++ __emit),那么既然可以即时编译,自然可以逆向,但这是属于 “高阶” 反射方面的内容,基本的说任何只要是托管类型的程式,都是可以在运行时IL逆转的,类似 JavaScript 语言逆转代码相对 .NET、JVM 会极其直观,像设计立于 “通用语言平台” 的 “过程虚拟机” 都没办法做到这种事情,我们xiang,参照对应平台的指令集进行人工的或者自动化的逆向过程。当然本人对并没有耗费太...转载 2021-04-23 20:27:10 · 479 阅读 · 0 评论 -
C# 多线程并发下各种锁的性能
一般情况下,只要涉及到多线程编程,程序的复杂性就会显著上升,性能显著下降,BUG出现的概率大大提升。多线程编程本意是将一段程序并行运行,提升数据处理能力,但是由于大部分情况下都涉及到共有资源的竞争,所以修改资源对象时必须加锁处理。但是锁的实现有很多种方法,下面就来一起了解一下在C#语言中几种锁的实现与其性能表现。几种锁的运用方式1、原子锁通过原子操作Interlocked.CompareExchange实现“无锁”竞争。private static int isLock;privat转载 2021-02-25 16:34:48 · 3825 阅读 · 0 评论 -
C#中volatile的用法
恐怕比较一下volatile和synchronized的不同是最容易解释清楚的。volatile是变量修饰符,而synchronized则作用于一段代码或方法;看如下三句get代码:inti1;intgeti1(){returni1;} volatileinti2;intgeti2(){returni2;} inti3;synchronizedintgeti3(){returni3;} geti1()得到存储...转载 2021-02-20 14:10:42 · 180 阅读 · 0 评论 -
浅析C#中 ConcurrentDictionary的实现
简单画了一张图 (灵魂画手 →_→)如图ConcurrentDictionary 其中有个tables 对象主要存储,而这个 tables 是一个 很多区块的 数组 ,每个区块 又是一个node的链表 (ps: 一个node 就是一个key value 对)具体实现如下(ps 代码摘自 net4.5): private volatile ConcurrentDictionary<TKey, TValue>.Tables m_tables; private clas.转载 2021-02-20 11:08:16 · 1854 阅读 · 0 评论 -
C# lock 语法糖实现原理--《.NET Core 底层入门》之自旋锁,互斥锁,混合锁,读写锁
在多线程环境中,多个线程可能会同时访问同一个资源,为了避免访问发生冲突,可以根据访问的复杂程度采取不同的措施原子操作适用于简单的单个操作,无锁算法适用于相对简单的一连串操作,而线程锁适用于复杂的一连串操作原子操作修改状态要么成功且状态改变,要么失败且状态不变,并且外部只能观察到修改前或者修改后的状态,修改中途的状态不能被观察到.NET 中,System.Threading.Interlocked 类提供了用于执行原子操作的函数,这些函数接收引用参数(ref),也就是变量的内存地址,然后针对该转载 2020-06-10 10:36:05 · 864 阅读 · 0 评论