Web Analytics
yangyang

码农兼一个普普通通小青年

All Posts in 2023.7


“异常”应该仅用于真正的异常情况而不应将其当作正常处理流程来使用

在《Writing High-Performance .NET Code》这本书中,作者指出,抛出“异常”(Exception)的开销十分高昂,很大一部分原因是.NET的异常对象中包含了丰富的信息,“异常”必须是为真正的异常情况服务,在这种情况下性能可以退居其次。 作者还举了例子,说明了三个事实: 抛出“异常”的方法比空方法慢了数千倍。 “异常”抛出的层数越深,速度就越慢。 和只用1个catch相比,多个catch语句的影响比较轻微,但仍然影响很明显。 使用catch捕获异常的开销可能不大,但是要访问Exception对象的StackTrace属性开销可能会非常高。因为需要由“异常”指针重建调用栈,并转译成可读文本。作者反复强调,“异常”应该仅用于真正的异常情况,如果将“异常”作为正常的处理流程来使用,会让程序毫无性能可言。 …

Exceptions

.NET中几种名字包含Dictionary的数据结构

在.NET Core的源代码中,除了常用的Dictionary、ConcurrentDictionary之外,还有几种名称包含Dictionary的数据结构,它们是ListDictionary、OrderedDictionary、SortedDictionary、HybirdDictionary和StringDictionary。这些个杂牌Dictionary用得很少,不看源代码可能还不知道😂。表面上看,好像都是Dictionary,但研究发现其内部实现却大不相同。 …

ListDictionary OrderedDictionary SortedDictionary HybridDictionary

.NET Core中Dictionary的实现

Dictionary是一种存储键值对的数据结构,可以根据Key快速查找对应的Value,它的内部实现原理其实很简单,在浅谈算法和数据结构: 十一 哈希表这篇文章中有详细介绍,但实际的原理和工程实现可能有所不同,在.NET中有.NET Framework和.NET Core的两个版本,大体相同,但细节上有所区别。这里以.NET Core中的Dictionary源码为例,来说明Dictionary的实现细节。 …

Hashtable Dictionary