本文摘自PHP中文网,作者零下一度,侵删。
在之前一段时间里面,我的基类多数使用lock和Hashtable组合实现多线程内缓存的冲突处理,不过有时候使用这两个搭配并不尽如人意,偶尔还是出现了集合已经加入的异常,对代码做多方的处理后依然如故,最后采用了.NET 4.0后才引入的ConcurrentDictionary多线程同步字典集合,问题顺利解决。1、使用lock和Hashtable组合实现
在我的基类里面,构建业务对象,一般用BLLFactory<T>.Instance就可以获得对应业务对象的应用了。
1 2 |
|
因此使用BLLFactory<T>.Instance这个构建对象后,把它们放到HashTable里面,由于需要设计多线程冲突处理,因此需要使用lock对象来实现锁定的处理。
HashTable表示键/值对的集合。在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key-value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key-value键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对,任何非 null 对象都可以用作键或值。
使用这种方式,偶尔在Web端,还是出现多线程访问冲突的问题,为此我们也可以使用多线程的测试代码来进行测试重现错误,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
跟踪代码得到错误信息如下所示。
相关阅读 >>
浅谈c# 之 hashtable 与 dictionary的代码实例
代码分析:在.net core中使用ref和span<t>提高程序性能
使用 vscode 编写 .net core 项目的实例教程
uwp中使用composition api实现吸顶的介绍(二)
uwp中使用composition api实现吸顶的实例教程
更多相关阅读请进入《ConcurrentDictionary》频道 >>
C#高级编程(第11版) C# 7 & .NET Core 2.0(.NET开发经典名著)
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。