随笔分类 -  C#

关于C#的文章
UTF8编码转为中文字符串(c#)
摘要:如何将\x开头的编码转换为字符串,如下数据: var data = @"{\x22Province\x22:\x22\xE6\x9D\xAD\xE5\xB7\x9E\xE5\xB8\x82\x22}"; 逻辑:1、将\xdd的数据提取出来;2、通过\x分隔出每个Char字符,即dd;3、将得到的Ch 阅读全文
posted @ 2021-05-31 13:47 F风 阅读(3308) 评论(0) 推荐(0)
Semaphore和SemaphoreSlim实现并发同步
摘要:Semaphore,中文译为信号灯。在C#中,它可以允许指定数量的线程同时访问共享资源,而其他的线程必须等待。 即现在有5个线程同时运行,但Semaphore指定2个线程可以同时访问某一共享资源。当执行Semaphore.Wait()时,只有2个线程可以同时进入访问共享资源,而其他三个线程则阻塞等待 阅读全文
posted @ 2020-10-22 17:25 F风 阅读(590) 评论(0) 推荐(0)
Barrier实现并发同步
摘要:Barrier,中文被译为屏障。在C#中,可以用来实现多任务在多阶段中协同工作。通俗来讲,就是多个线程在执行到某个被共同指定步骤(即Barrier.SignalAndWait())的时候,就像遇到了屏障一样,必须等待其他还未执行到该步骤的线程。如果每个线程都执行到了该步骤,则大家又继续执行各自的逻辑 阅读全文
posted @ 2020-10-22 15:20 F风 阅读(994) 评论(0) 推荐(0)
CountdownEvent实现并发同步
摘要:CountdownEvent,该类包含一个需要被初始化的计数器数字,如果该计数器数字归零之后,就会释放被阻塞的线程。 CountdownEvent.Signal()执行后,计数器会自减1; CountdownEvent.Wait()执行后,如果计数器归零,则会立即释放该线程;否则,就会阻塞当前线程。 阅读全文
posted @ 2020-10-22 10:01 F风 阅读(312) 评论(0) 推荐(0)
AutoResetEvent实现并发同步
摘要:AutoResetEvent,继承自EventWaitHandle,用在多线程中保护对共享资源的访问,保证每次只能有一个线程对共享资源进行访问。 AutoResetEvent最特别之处,在于每次保证只有一个线程执行逻辑,其他的线程只能等待。 AutoResetEvent通过信号量来阻塞和释放线程。其 阅读全文
posted @ 2020-10-21 16:59 F风 阅读(184) 评论(0) 推荐(0)
TrieTree树
摘要:昨天看到一篇介绍TrieTree树的文章,感觉还不错的。于是小小研究了一下,并用C#实现了相关代码。 TrieTree树提供对字符的存储和遍历,可以用来查询词汇出现的频率或实现其他功能,速度还挺快。最特色的是,如果有相同前缀词的字符串,则它们的前缀部分可以被共享存储。 TrieTree类是一个单例类 阅读全文
posted @ 2020-10-20 11:10 F风 阅读(171) 评论(0) 推荐(0)
.net core webapi 使用ValidationAttribute对比同一对象的多个参数
摘要:众所周知,在使用DataAnnotations数据验证的时候,特别是针对同一个InputDto的多个属性进行对比的时候,例如起始日期不能大于结束日期,我们需要在Attribute中知道当前InputDto对象的类型和对象值,以便进行两个属性的对比。 做到以上操作,我们需要使用ValidationAt 阅读全文
posted @ 2018-10-25 17:05 F风 阅读(627) 评论(0) 推荐(0)
.net core WebApi ManualResetEvent实现并发同步
摘要:ManualResetEvent,即手动重置事件,通过信号量来判别当前线程是否应该阻塞或继续执行。使用方式与ManualResetEventSlim差不多,ManualResetEventSlim只是针对ManualResetEvent轻量化的使用。 当执行ManualResetEvent.Set( 阅读全文
posted @ 2018-09-29 11:53 F风 阅读(1005) 评论(0) 推荐(0)
.net core WebApi Mutex实现并发同步
摘要:Mutex,中文译为互斥体,在.net中也是作为一种线程或进程之间的互斥体存在。即在同一时刻,一个共享资源只允许被某一个线程或进程访问,其他线程或进程需要等待(直至获取互斥锁为止)。 Mutex的使用方式与Monitor很相似,但绝不相同。Monitor支持线程间并发同步,Mutex不但支持线程也支 阅读全文
posted @ 2018-09-28 16:45 F风 阅读(3247) 评论(2) 推荐(1)
.net core WebApi Monitor实现并发同步
摘要:在.net中,还可以使用Monitor实现线程并发同步。Monitor类是纯托管且完全可移植,并且可能会在操作系统资源需求方面更加高效。 Monitor的锁对象尽可能使用引用对象,如果是字符串或值对象,会出现引发SynchronizationLockException异常。 其实我们日常用的lock 阅读全文
posted @ 2018-09-27 21:47 F风 阅读(844) 评论(0) 推荐(0)
.net Monitor产生SynchronizationLockException异常的原因
摘要:有时在使用Monitor进行并发同步编程时,会产生SynchronizationLockException异常,抛出的异常内容是"Object synchronization method was called from an unsynchronized block of code." 。意思是“ 阅读全文
posted @ 2018-09-27 18:30 F风 阅读(1270) 评论(0) 推荐(0)
.net 表达式返回值和等号赋值的区别
摘要:.net 7.0的新特性中,有一个使用表达式体返回值的操作。请看如下代码: 这样看起来是不是和使用等号(=)获取值一样的方便。 但是,请不要认为使用表达式体(=>)获取值和用等号(=)获取值是一样的概念,那你会被坑惨! 针对引用类型来说,因为使用表达式体(=>)获取的值都不是同一个对象,而使用等号( 阅读全文
posted @ 2018-09-27 18:17 F风 阅读(332) 评论(0) 推荐(0)
.net core WebApi Interlocked配合ManualResetEventSlim实现并发同步
摘要:由于项目有某种需求,在WebApi中,有大量的请求需要操作相同的数据,因此需要用到并发同步机制去操作共享的数据。 本次配合使用Interlocked和ManualResetEventSlim来实现并发同步的目的。 Interlocked实现了原子性的操作,ManualResetEventSlim提供 阅读全文
posted @ 2018-09-25 18:34 F风 阅读(409) 评论(0) 推荐(0)
.net 在同步方法中使用拉姆达表达式执行async/await异步操作
摘要:代码如下: 使用上面那种方式,在拉姆达表达式body内直接使用异步方式,可以将一个同步方法直接变为一个异步方法执行,而不用在Main函数前面添加async关键字。 阅读全文
posted @ 2018-09-12 14:30 F风 阅读(278) 评论(0) 推荐(0)
c# async/await异步编程死锁的问题
摘要:在异步编程中,如果稍有不注意,就会造成死锁问题。何为死锁:即两个以上的线程同时争夺被互相锁住的资源,两个都不放手。 在UI或asp.net中,容易造成死锁的代码如下所示: 当执行btnSet_Click方法时,程序就会造成死锁,this.Text="测试" 这一行代码永远都不会执行。 为何会造成死锁 阅读全文
posted @ 2018-03-08 16:27 F风 阅读(1734) 评论(0) 推荐(0)
c# 关于async/await异步编程的浅析和使用
摘要:线程的同步运行,时效性慢,异步运行,时效性快! 在c#5.0引出了async/await关键字,可以用其来进行异步编程。 async/await定义异步方法的语法如下: 1、在方法的返回类型前面加上async关键字; 2、返回类型固定为void、Task和Task<T>。返回类型建议用Task或Ta 阅读全文
posted @ 2018-03-08 10:06 F风 阅读(267) 评论(0) 推荐(0)
c#7的新特性
摘要:1、out关键字 2、元组 3、可以在函数中创建本地函数 4、数字分隔符 阅读全文
posted @ 2018-03-06 17:21 F风 阅读(146) 评论(0) 推荐(0)
asp.net 自定义的模板方法接口通用类型
摘要:本来想写这个帖子已经很久了,但是公司事情多,做着做着就忘记了。公司因为需要做接口,而且用的还是asp.net的老框架,使用Handler来做,没得办法,自己照着MVC写了一个通过的接口操作模板。 上送json数据,返回的也是json数据。可以像MVC一样自动绑定并可以进行DataAnnotation 阅读全文
posted @ 2017-11-09 16:04 F风 阅读(1372) 评论(0) 推荐(0)
c# 十进制转二、八、十六进制
摘要:一、十进制转二、八、十、十六进制字符串 Convert.ToString(int decNum,int toBase); decNum为十进制字符串, toBase可以为2、8、10、16 如果要转换为2进制,则如下所示: 结果为:1011 其他诸如8、10、16进制的类似。 阅读全文
posted @ 2017-08-29 08:59 F风 阅读(196) 评论(0) 推荐(0)
asp.net中HttpModule扩展的浅析
摘要:在asp.net中,我们可以使用HttpModule扩展自己的相关业务。可以在HttpApplication的19个管道事件中注入我们自己的业务逻辑代码。 闲话不说,代码先上。 一、新建网站项目 我们可以在该新建的网站项目里面做自己想要做的开发。 二、新建一个HttpModule扩展 我们可以在当前 阅读全文
posted @ 2017-08-08 18:20 F风 阅读(262) 评论(0) 推荐(0)