随笔分类 - .Net core
摘要:一个很清晰的架构实践,同时刨刨MySQL的坑。 一、洋葱架构简介 洋葱架构出来的其实有一点年头了。大约在2017年下半年,就有相关的说法了。不过,大量的文章在于理论性的讨论,而我们今天会用一个项目来完成这个架构。 洋葱架构,有时候也被叫做整洁架构,它本身是为高质量的软件而存在的。 相对其它架构而言,
阅读全文
摘要:Dotnet里,数据定位和匹配的相关编程现在变得很舒服。 最近项目紧,还要不停出差。 所以,写个短点的、最近经常用到的内容:数据定位和匹配。 数据定位 假设我们有这样一个数组: var array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; 我们取某个
阅读全文
摘要:最近在做一个项目,用到了大量的非托管技术,所以垃圾回收变得很重要。 在说垃圾回收之前,先说说两个概念: 托管代码,是由CLR管理的代码 非托管代码,是由操作系统直接执行的代码 在早期C++的时候,内存分配和释放都是由我们手动处理的,而在公共语言进行时CLR中,多了一个垃圾收集器GC,来充当自动内存管
阅读全文
摘要:过年啦,写个短点的。同时,提前给大家拜个年。 总有小伙伴们跑过来讨论关于Span和Memory的使用,眼瞅是最近关于Span的文章有点多,看飞了。 今天写这个,就是往回拉一拉。 写之前,先声明一下。这些内容是我自己使用的一些经验,并不代表这些类的全部内容就是这些,只是说,我是这么用的,而且用得很好。
阅读全文
摘要:上一篇说了一下委托,这篇来说说局部函数和委托的对比。 把委托和局部函数放成前后篇,是因为这两个内容很像,用起来容易混。 需要了解委托相关内容,可以看这一篇 【传送门】 使用委托表达式(Lambda) 假设一个场景:我们有一个订单列表,里面有售价和采购价。我们需要计算所有物品的毛利率。 public
阅读全文
摘要:简单的概念,也需要经常看看。 一、前言 先简单说说Delegate的由来。最早在C/C++中,有一个概念叫函数指针。其实就是一个内存指针,指向一个函数。调用函数时,只要调用函数指针就可以了,至于函数本身的实现,可以放在其它地方,也可以后实现。到了.Net,没有指针的概念了,但这种方式很实用,所以这个
阅读全文
摘要:今天用一个简单例子说说异步的多路径终止。我尽可能写得容易理解吧,但今天的内容需要有一定的编程能力。 今天这个话题,来自于最近对gRPC的一些技术研究。 话题本身跟gRPC没有太大关系。应用中,我用到了全双工数据管道这样一个相对复杂的概念。 我们知道,全双工连接是两个节点之间的连接,但不是简单的“请求
阅读全文
摘要:有时候,越是基础的东西,越是有人不明白。 前几天Review一个项目的代码,发现非常基础的内容,也会有人理解出错。 今天,就着这个点,写一下Dotnet Core的主要类型的项目结构,以及之间的转换和演化。 一、最基础的应用Console 控制台应用,是Dotnet Core乃至前边的Dotnet
阅读全文
摘要:API升级,新旧版本的API共存,怎么管理呢? 一、前言 最近,单位APP做了升级,同步的,API也做了升级。 升级过程中,出现了一点问题:API升级后,旧API也需要保留,因为有旧的APP还在使用中。 那么,API端如何作到多个版本共存呢? * 为防止非授权转发,这儿给出本文的原文链接:https
阅读全文
摘要:今天来写写C#中的异步迭代器 - 机制、概念和一些好用的特性 迭代器的概念 迭代器的概念在C#中出现的比较早,很多人可能已经比较熟悉了。 通常迭代器会用在一些特定的场景中。 举个例子:有一个foreach循环: foreach (var item in Sources) { Console.Writ
阅读全文
摘要:今天给大家分享一个微软官方的好东西:Channel。 前言 今天给大家分享一个微软官方的生产者/消费者方案的特性解决:Channel。 Channel在System.Threading.Channels命名空间下,Core 2.1使用时,需要从Nuget上安装。 % dotnet add packa
阅读全文
摘要:Span这个东西出来很久了,居然因为5.0又火起来了。 相关知识 在大多数情况下,C#开发时,我们只使用托管内存。而实际上,C#为我们提供了三种类型的内存: 堆栈内存 - 最快速的内存,能够做到极快的分配和释放。堆栈内存使用时,需要用stackalloc进行分配。堆栈的一个特点是空间非常小(通常小于
阅读全文
摘要:前一篇文章,概念性地介绍了K8s的一些基础组件,如Pod、部署和服务。这篇文章,我打算写写如何使用YAML清单定义和配置这些资源。 实际上,在K8s集群中创建对象有几种方式 - 命令,或声明。两种方式区别不大。 不过实际应用中,一旦开始真正部署应用,最终都会走到YAML配置文件方式。这种方式也叫配置
阅读全文
摘要:最近闲了点,写个大活:部署Dotnet应用到K8s。 写在前边的话 一直想完成这个主题。但这个主题实在太大了,各种拖延症的小宇宙不时爆发一下,结果就拖到了现在。 这个主题,会是一个系列。在这个系列中,我会讨论将应用部署到K8s时需要的各个内容和知识,以及各种刨过的坑。 为了避免这个系列被扩得过大,我
阅读全文
摘要:Quartz.NET这么NB的作业调度系统,不会还行? 今天介绍一下Quartz.NET的托管运行,官网传送门。 一、前言 Quartz.NET,按官网上的说法,是一款功能齐全的任务调度系统,从小型应用到大型企业级系统都能适用。在众多项目中,Quartz.NET以可靠、集群的方式,被用作在定时器上运
阅读全文
摘要:Dotnet Core的SDK版本总在升级,怎么使用一个特定的版本呢? 假期过完了,心情还在。今天写个短的。 一、前言 写这个是因为昨天刷微软官方文档,发现global.json在 SDK 3.0 后,更新了一些内容。文档提到了这个更新,但规则说的不太清楚,所以研究了一下,成了这个文章。 先普及一下
阅读全文
摘要:今天,我们深度研究一下IHttpClientFactory。 一、前言 最早,我们是在Dotnet Framework中接触到HttpClient。 HttpClient给我们提供了与HTTP交互的基本方式。但这个HttpClient在大量频繁使用时,也会给我们抛出两个大坑:一方面,如果我们频繁创建
阅读全文
摘要:这一篇是接着前一篇在写的。如果没有看过前一篇文章,建议先去看一下前一篇,这儿是传送门 一、前言 前一篇文章,我们从应用启动时异步运行任务开始,说到了必要性,也说到了几种解决方法,及各自的优缺点。最后,还提出了一个比较合理的解决方法:通过在Program.cs里加入代码,来实现IWebHost启动前运
阅读全文
摘要:这是一个大的题目,需要用几篇文章来说清楚。这是第一篇。 一、前言 在我们的项目中,有时候我们需要在应用程序启动前执行一些一次性的逻辑。比方说:验证配置的正确性、填充缓存、或者运行数据库清理/迁移等。 如何合理、有效、优雅地完成这个任务,是这个文章讨论的主要内容。 要实现这样一个功能,其实我们有几个选
阅读全文
摘要:想写好中间件,这是基础。 一、前言 今天这个内容,基于于ASP.NET Core 3.x。 从3.x开始,ASP.NET Core使用了通用主机模式。它将WebHostBuilder放到了通用的IHost之上,这样可以确保Kestrel可以运行在IHostedService中。 我们今天就来研究一下
阅读全文