Web Analytics
yangyang

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

HashSet


多线程环境下使用HashSet抛出NullReferenceException异常的分析

在.NET中有普通集合类型比如Queue,Dictionary等,也有对应的并发集合比如ConcurrentQueue,ConcurrentDictionary,顾名思义,前者是非线安全的,如果要在多线程环境下使用,需要自己加锁,后者则是线程安全的。 线程安全是有代价的,那就是会影响效率。在有些时候下,应用场景很少写,但读很非常频繁,在允许“脏读”的情况下,是不是直接使用普通的集合类型就可以呢,答案是可以,但是需要非常慎重,否则可能会抛出异常。今天我就遇到了这个问题。 场景 有个类SymbolManager,在内部有一个HashSet,这个HashSet里保存了一系列代码,程序会在每天早上的9点重新加载本地文件里的代码到这个HashSet集合里,同时这个类对外提供了一个IsSymbol 方法,以判断某个代码是否在此HashSet中。 class SymbolManager …

HashSet

  • 1