![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#
文章平均质量分 72
你的笑犹如初夏的阳光
这个作者很懒,什么都没留下…
展开
-
NetCore实现全局模型绑定异常信息统一处理
本文主要讲解NetCore如何使用中间件捕获模型绑定的异常信息场景在 .NET Core 中请求中,如果参数的类型错误,我们在控制器的定义的方法是不会执行的,当需要捕获模型绑定的异常信息时,需要使用ApiBehaviorOptions.,接下来通过一个小demo给大家讲解一下用法实现代码 public static void ConfigureModelBindingExceptionHandling(this IServiceCollection services) { .原创 2021-12-27 22:45:31 · 609 阅读 · 0 评论 -
一文带你了解.Net读写锁
本文主要讲解.Net基于ReaderWriterLockSlim讲解读写锁基础概念读写锁是一个具有特殊用途的线程锁,适用于频繁读取且读取需要一定时间的场景,共享资源的读取操作通常是可以同时执行的,普通的互斥锁不管是获取还是修改操作无法同时执行,如果多个线程为了读取操作而获取互斥锁,那么同一时间只有一个线程可以执行读取操作,频繁读取的场景下回对吞吐量造成影响读写锁把锁分为读取锁和写入锁,线程可以根据对共享资源的操作类型获取读取锁还是写入锁,读取锁可以被多个线程同时获取,写入锁不可以被多个线程.原创 2021-07-05 20:42:16 · 204 阅读 · 0 评论 -
一文带你了解.Net信号量
本文主要讲解.Net基于Semaphore带大家了解信号量信号量举例大家去银行去银行取钱,互斥锁管理的时一个柜台是否正在处理业务,而信号量管理的是整个柜台是否正在处理业务,每当有一个柜台处理完成之后,A大堂经理则进行叫号喊下一位进行处理业务,B大堂经理则对进来的客户进行接待,当柜台全部都在办理业务时,新来的办理业务者则需要进行等待信号量的基础概念信号量是一个具有特殊用途的线程同步对象,相比互斥锁只有两个状态(未被获取/已被获取),信号量内部使用一个数值记录可用的数量,每个线程可以通过增加和减少数.原创 2021-07-05 20:10:07 · 420 阅读 · 0 评论 -
一文带你了解.Net混合锁和lock语句
本文主要讲解.Net基于Monitor.Enter和lock实现互斥锁Monitor.Enter实现相比前面的锁来说,混合锁的性能更高,任何引用类型的对象都可以做为锁对象,不需要事先创建指定类型的实例,并且设计的非托管的资源由.Net运行时自动释放,不需要手动调用释放函数,获取和释放混合锁需要使用System.Threading.Monitor类中的函数。使用Monitor使用混合锁的例子如下:using System;using System.Threading;namespace Mix.原创 2021-06-22 22:33:46 · 503 阅读 · 0 评论 -
一文带你了解.Net互斥锁
本文主要讲解.Net基于Threading.Mutex实现互斥锁基础互斥锁实现基础概念:和自旋锁一样,操作系统提供的互斥锁内部有一个数值表示锁是否已经被获取,不同的是当获取锁失败的时候,它不会反复进行重试,而且让线程进入等待状态,并把线程对象添加到锁关联的队列中,另一个线程释放锁时会检查队列中是否有线程对象,如果有则通知操作系统唤醒该线程,因为获取锁的线程对象没有进行运行,即使锁长时间不释放也不会消耗CPU资源,但让线程进入等待状态和从等待状态唤醒的时间比自旋锁重试的纳秒级时间要长windows.原创 2021-06-16 23:09:02 · 302 阅读 · 0 评论 -
一文带你了解.Net自旋锁
本文主要讲解.Net基于Thread实现自旋锁的三种方式###基于Thread.SpinWait实现自旋锁实现原理:基于Test–And–Set原子操作实现使用一个数据表示当前锁是否已经被获取 0表示未被索取,1表示已经获取 获取锁时会将_lock的值设置为1 然后检查修改前的值是否等于0,优点:不使用Thread.SpinWait方法,重试的方法体会为空,CPU会使用它的最大性能来不断的进行赋值和比较指令,会浪费很大的性能,Thread.SpinWait提示CPU当前正在自旋锁的循环中,可.原创 2021-06-15 22:56:45 · 150 阅读 · 0 评论 -
C#通过rabbitmq实现定时任务(延时队列)
本文主要讲解如何通过RabbitMQ实现定时任务(延时队列)环境准备需要在MQ中进行安装插件 地址链接插件介绍地址:https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/使用场景作为一个新的预支付订单被初始化放置,如果该订单在指定时间内未进行支付,则将被认为超时订单进行关闭处理;电商系统中应用较多,用户购买商品产生订单,但未进行支付,订单产生30分钟内未支付将关闭订单(且满足该场景数量庞大),不可能.原创 2021-04-26 17:29:40 · 314 阅读 · 0 评论 -
AutoMapper源码解析
研究AutoMapper源码前,我们先来看一下AutoMapper的作用官网解释:AutoMapper是一个简单的小程序库,旨在解决看似复杂的问题-摆脱将一个对象映射到另一个对象的代码 解释首先一个简单的使用AutoMapper方法演示ar config = new MapperConfiguration(cfg => cfg.CreateMap<ModelObject, ModelDto>() ); .原创 2021-01-31 15:42:27 · 499 阅读 · 0 评论 -
.NetCore依赖项注入:生命周期和最佳做法
DIP允许您将两个类解耦,否则它们会紧密耦合,这有助于提高可重用性和更好的可维护性原创 2020-11-17 22:39:07 · 2318 阅读 · 0 评论