05 2020 档案
摘要:介绍 读写锁的概念很简单,允许多个线程同时获取读锁,但同一时间只允许一个线程获得写锁,因此也称作共享-独占锁。在C#中,推荐使用ReaderWriterLockSlim类来完成读写锁的功能。 某些场合下,对一个对象的读取次数远远大于修改次数,如果只是简单的用lock方式加锁,则会影响读取的效率。而如
阅读全文
摘要:自旋锁(spinlock) 是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。 什么情况下使用自旋锁 自旋锁非常有助于避免阻塞,但是如果预期有大量阻塞,由于旋转过多,您可能不应该使用自旋锁。当锁是细粒度的并且数
阅读全文
摘要:KestrelServer Kestrel 是一个跨平台的适用于 Kestrel。 Kestrel 是 Web 服务器,默认包括在 ASP.NET Core 项目模板中。 如何使用 可以单独使用 Kestrel,也可以将其与反向代理服务器(如 IIS、Nginx 或 Apache)结合使用。 反向代
阅读全文
摘要:引言 使用HTTP(超文本传输)协议访问互联网上的数据是没有经过加密的。也就是说,任何人都可以通过适当的工具拦截或者监听到在网络上传输的数据流。但是有时候,我们需要在网络上传输一些安全性或者私秘性的数据,譬如:包含信用卡及商品信息的电子订单。这个时候,如果仍然使用HTTP协议,势必会面临非常大的风险
阅读全文
摘要:单体架构 应用程序就是一个项目,在一个进程中运行 单体架构的优点是开发简单、集中管理、没有分布式损耗 微服务架构 微服务架构是一种架构风格,旨在通过将单体程序的功能分解到各个离散的服务中心以实现对解决方案的解耦 DDD是一个很好的应用于微服务架构的方法论。 微服务架构特点: 一组小的服务 独立进程、
阅读全文
摘要:ConfigureServices方法中添加: public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(CookieAuthenticationDefaults.Authentic
阅读全文
摘要:实现IApplicationModelConvention接口: public class NameSpaceVersionRoutingConvention:IApplicationModelConvention { private readonly string apiPrefix; priva
阅读全文
摘要:定义 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 类图 应用场景 避免产生多个对象消耗过多的资源(特别是一个对象需要频繁的创建和销毁时); 提供一个全局访问点,常常被用来管理系统中共享的资源(作为一个Manager)。 实现方式 延迟初始化(懒汉模式) 适用于单线程应用程序
阅读全文
摘要:volatile特点: 保证可见性,可见性是指当一个线程修改了共享变量的值,其他线程可以立即得知 保证有序性? 不保证原子性(需要使用悲观锁or乐观锁) 线程栈: 每一个线程运行时都有一个线程栈,线程栈保存了线程运行时候变量值信息。当线程访问某一个对象时候值的时候,首先通过对象的引用找到对应在堆内存
阅读全文
摘要:实现线程的本地存储,也就是线程内可见。这些数据都是存放在线程环境块中,是线程的空间开销 有以下几种方式 线程数据槽 已过时,建议使用ThreadStaticAttribute static void Main(string[] args) { var slot = Thread.AllocateDa
阅读全文
摘要:BenchmarkDotNet 是一个强大的. NET 库, 可用于性能测试,Benchmark 可以精准简单的测试应用程序性能,它为每个测试方法生成一个独立的项目, 执行此项目的多个启动, 并运行测试方法,以保证测试的精准性。 时间可以精确到微秒(us)、纳秒(ns),还可以测试内存使用情况 要想
阅读全文
摘要:Refit可以进行强类型的客户端调用 Refit 是一个类型安全的 REST 开源库,是一套基于 RESTful 架构的 .NET 客户端实现,内部使用 HttpClient 类封装,可通过 Refit 更加简单安全地访问 Web API 接口,要使用 Refit 框架,只需要在项目中通过 NuGe
阅读全文
摘要:简介 Parallel类是对线程的抽象,提供数据与任务的并行性。 在同步状态下简化Task的使用,也就是使用For、Foreach、Invoke方法时,调用者线程是阻塞的。 并行方法 Parallel对象提供了3个静态方法来实现 数据和任务的并行 Parallel.For Parallel.ForE
阅读全文
摘要:重要对象 JwtSecurityToken 代表一个jwt token,可以直接用此对象生成token字符串,也可以使用token字符串创建此对象 SecurityToken JwtSecurityToken的基类,包含基础数据 JwtSecurityTokenHandler 创建、校验token,
阅读全文
摘要:使用位类型枚举,可以组合枚举值,如果需要多个枚举值,可以用位枚举 枚举添加[Flags],标识位枚举 案例: [Flags] enum Styles { white=1, yellow=2, grean=4, blue=8, gray=16, orange=32, pink=64, red=128,
阅读全文
摘要:什么是状态模式 状态模式是一种行为型设计模式,它主要用来解决对象在不同状态下的行为问题。在状态模式中,一个对象的内部状态改变时,它的行为也会随之改变。实现状态模式的关键是将对象的不同状态抽象成独立的类,然后将这些状态类与原有对象关联起来组成一个状态机。 状态模式应用场景 当一个对象的行为取决于内部状
阅读全文
摘要:实体 public class SlaveConfiguration { public string ConnectionString { get; set; } public int Weight { get; set; } public int Attach { get; set; } } 轮巡
阅读全文
摘要:性能接近硬编码,推荐使用 /// <summary> /// 高性能对象映射 /// </summary> /// <typeparam name="TSource"></typeparam> /// <typeparam name="TTarget"></typeparam> public sta
阅读全文
摘要:自己写了一个缓存代理,使用代理模式,支持指定函数、支持按参数缓存,原创 后续会支持缓存异步数据 CacheProxy: function CacheProxy(obj,proxyMethods){ var _cache={}; var _getType=Object.prototype.toStri
阅读全文