随笔分类 - C#.Net
摘要:最简单的信号发送结构是事件等待句柄(注意它和C#的事件是无关的)。事件等待句柄有三种实现:AutoResetEvent、ManualResetEvent(Slim)和CountdownEvent。前两种基于通用的EventWaitHandle类,它们继承了基类的所有功能。 AutoResetEven
阅读全文
摘要:非排他锁目的是限制并发性。 信号量 信号量(semaphore)就像俱乐部一样:它有特定的容量,还有门卫保护。在满员之后,就不允许其他人进入了,人们只能在外面排队。只有当有人离开时,才准许另外一个人进入。信号量的构造器需要至少两个参数:即俱乐部当前的空闲容量以及俱乐部的总容量。 容量为1的信号量与M
阅读全文
摘要:排他锁结构有三种:lock语句、Mutex和SpinLock。 **其中lock是最方便最常用的结构。**而其他两种结构多用于处理特定的情形:Mutex可以跨越多个进程(计算机范围锁)。SpinLock可用于实现微优化,可以在高并发场景下减少上下文切换。 lock语句 先看如下代码: class T
阅读全文
摘要:字典是一种集合,其包含的元素均为键值对。字典通常用于查找或用作排序列表。 框架通过IDictionary和IDictionary<TKey, TValue>接口以及一系列通用的字典类定义了标准字典协议。 IDictionary<TKey, TValue> IDictionary<TKey, TVal
阅读全文
摘要:.NET Core提供了一些基本的具体集合类,这些类实现了一系列集合接口。和集合接口一样,每一种集合类型都可以选择使用泛型或非泛型进行实现。在灵活性和性能方面,泛型类更具有优势,而它们的非泛型冗余版本则是为了向后兼容。这与集合接口不同,非泛型集合接口在某些情形下是有其作用的。而泛型List类是最常用
阅读全文
摘要:Array类是所有一维和多维数组的隐式基类,它是实现标准集合接口的最基本类型之一。Array类提供了类型统一性,所以所有的数组对象都能够访问同一套公共方法,而与它们的声明或实际的元素类型无关。 当使用C#语法声明数组时,CLR会将其隐式转换为Array类的子类,合成一个对应该数组维度和元素类型的伪类
阅读全文
摘要:虽然枚举接口IEnumerable提供了一种向前迭代集合的协议,但是它们并没有提供确定集合大小、根据索引访问成员、搜索以及修改集合的机制。为了实现这些功能,.NET Core定义了ICollection、IList和IDictionary接口。这些接口都支持泛型和非泛型版本。然而,非泛型版本的存在只
阅读全文
摘要:快速认识ORM 对象-关系映射,即Object/Relation Mapping,主要实现程序对象到关系数据库的映射。现在.Net比较流行的ORM框架有:EF、SqlSugar、Dapper、FreeSql、Nhibernate、IBatis.Net等。 O/RM只是一层代码的封装,底层还是基于AD
阅读全文
摘要:安装Nuget包:ServiceStack.Redis 连接数据库 using (RedisClient client = new RedisClient("127.0.0.1", 6379)) { //删除当前数据库中的所有Key 默认删除的是db0 client.FlushDb(); //删除所
阅读全文
摘要:为了避免运行时编译cshtml造成的性能问题,ASP.NET Core MVC项目在发布的时候默认会把cshtml文件编译到dll中,但是有的项目希望能在运行时修改cshtml视图文件。网上有文章讲到过在csproj文件中添加 <MvcRazorCompileOnPublish>false</Mvc
阅读全文
摘要:IEnumerable 和 IEnumerator IEnumerator接口定义了以向前方式遍历集合的基本底层协议。 声明如下: public interface IEnumerator { bool MoveNext(); object Current { get; } void Reset()
阅读全文
摘要:C#的CLR(即 common language runtime,公共语言运行库)包含两种任务组合器:Task.WhenAny和Task.WhenAll。 我们先定义如下方法: async Task<int> Delay1() { await Task.Delay(1000); return 1;
阅读全文
摘要:在C#8之前,可以使用yield return实现迭代器,也可以用await书写异步函数。但无法两者结合,实现一个可以等待的迭代器。C#8引入了异步流解决了这个问题。 异步流基于以下两个接口。 public interface IAsyncEnumerable<out T> { IAsyncEnum
阅读全文
摘要:要编写异步函数,可将返回类型void改为Task。这样方法本身就能进行异步调用,并且是可等待的。 async Task PrintAnswerToLife() { await Task.Delay (5000); int answer = 21 * 2; Console.WriteLine (ans
阅读全文
摘要:await关键字可以简便地附加延续。 static void Main(string[] args) { DisplayPrimesCount(); } static async void DisplayPrimesCount() { int result = await GetPrimesCoun
阅读全文
摘要:应用程序对HTTP请求的处理过程进行划分,每个环节称为中间件,将各个中间件串联起来,就形成了HTTP管道。 执行中间件的顺序与它们添加到管道的顺序相同,先添加的中间件会先执行。 添加方法有三种: (1)委托:中间件专用委托类型为RequestDelegate,对应的方法结构就是带HttpContex
阅读全文
摘要:枚举出程序中已添加的服务 Asp.Net Core 项目中的“服务”,指的是用于扩展应用程序功能的一系列类型。 在程序初始化期间,会把需要的服务类型实例添加到ServiceCollection集合中,这些服务实例将通过依赖注入提供给其他代码使用。 下面遍历一下已添加的服务: public stati
阅读全文
摘要:Web主机配置 使用默认配置创建Web主机 静态类WebHost,公开了一系列简便方法,可使用默认配置参数创建Web主机。用的较多的是CreateDefaultBuilder方法,默认配置创建WebHostBuilder实例。 默认配置包括: (1)使用内置Kestrel服务器组件,能够使Web应用
阅读全文
摘要:问题:使用SqlSugar批量更新时报错“SqlSugar.SqlSugarException: You cannot have no primary key and no conditions”; 主键或条件不存在 Db.Updateable<User>(users).ExecuteCommand
阅读全文
摘要:特性 自定义特性类 特性是一种比较特殊的类,作为代码对象附加部分用于向运行时提供一些补充信息。 主要有三个特征: 从Attribute类派生 名称一般以Attribute结尾 声明特性类时必须在类上加AttributeUsage,用于标注当前声明的类应用于哪些对象 [AttributeUsage(A
阅读全文

浙公网安备 33010602011771号