- 博客(89)
- 资源 (24)
- 收藏
- 关注
原创 c# 锁 浅谈
如果发现你的 lock 代码块里出现了 using、await、Image.FromFile、Thread.Sleep、Invoke,立即重构——这绝对是设计错误。” 耗时操作如果放在锁内,会导致其他线程(包括 UI 线程)长时间等待,界面直接“卡死”,或者引发死锁。锁内只放“内存赋值/取值”操作,耗时超过 1 毫秒的操作(IO、解码、UI、Dispose)全部扔到锁外面。什么时候:涉及 文件读取(解码)、图像处理(缩放/旋转)、网络请求 或 UI 界面更新(Invoke)。终极总结(记这一句就够了)
2026-07-28 11:30:37
253
原创 WPF UI标准流水线
提供的这个流水线方法,本质上是将WPF异步编程中反复出现的“线程切换 + 状态管理”模式抽象为一个可复用的基础设施。它让子类代码更简洁、更聚焦于业务,同时保证了UI线程安全。你只需要在子类中实现具体的状态捕获、后台任务和UI恢复逻辑,框架自动帮你处理调度和异常。如果你还想加入防重入和版本号功能,可以在子类中扩展,或者在的基础上再封装一层,传入一个Func<bool>检查是否可以执行,或者集成。这个基类为更高级的封装提供了良好的起点。
2026-07-27 14:40:38
217
转载 c# c++内存转换
首先传入托管的内存,c#层很可能会把它gc掉,而c++还在使用,而且托管的mem它的指针地址可能会发生改变,因此直接传给c++可能拿到的地址是错误的)有时需要在c++中分配一块处理好的内存,然后返回给c#来使用,如c++中某个接口 int func(int** data) (注意这里要使用指针的指针,因为data是得到的结果)//调用c++的函数,使unmanaged_ptr指向c++里分配的内存,注意这里用out ,才能与c++里面的**匹配。//将非托管内存拷贝成托管内存,才能在c#里面使用。
2023-02-01 15:49:13
431
原创 什么是k8s
在网络方面,默认docker容器是通过桥接与NAT和主机外网络通信,这样就出现2个问题,一个是因为是NAT,外部主机无法主动访问到容器内(除了端口映射),另外默认桥接IP是一样的,这样会出现不同主机的容器有相同的IP的情况。在容器可靠性方面,相较于Kubernetes的Replication Controllers可以监控并维持容器的生命,swarm在启动时刻可以控制容器启动,在启动后,如果容器或者容器主机崩溃,swarm没有机制来保证容器的运行。作用是一样的,k8s就是让docker来干事的。
2022-10-24 10:20:01
701
原创 CPU 原理
多级缓存寄存器1级缓存2级缓存3级缓存主存外存To Business 缓冲使用结构体,缓存使用类,视频客户端使用缓冲,视频服务端使用缓存栈是CPU直接操作的,缓冲和缓存是虚拟的,宏观概念。CPU ---- CPU 1、2、3级缓存 ---- 内存...
2022-10-24 10:17:31
132
原创 wpf 单个字母键快捷键,示例
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); List<Key> keys = new List<Key> { Key.B, Key.A, Key.F1 }; foreach (var item in keys) ...
2021-10-29 10:48:19
240
原创 vs release编译
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.com" "SinoRail.Metro.sln" /Build "Release|x64"pause
2021-01-18 13:14:18
460
原创 k8s 小识
k8s如何部署项目什么是微服务我们开发一个项目,这个项目有很多很多的模块,如果是一个单体项目,我们所有的模块一起部署,这个时候如果一个模块需要进行升级和维护,那我们必须停止这个项目,修改后再进行部署,会导致业务停止,那么这个时候,我们有一个需求,修改了这个模块,不停止项目也能正常提供其服务,所有我们将这个单体项目进行拆分成为一个个的子项目,这些子项目独立维护,独立部署,互不影响,那么我们把这些服务叫做微服务。例如:好比,我们开发一个电商项目,电商项目里面有很商品,订单,用户,支付模块,这些模块独立部署
2021-01-08 17:10:36
443
原创 docker-集群
docker-集群什么是docker集群什么是集群1、现实生活中集群2、软件中集群3、最后总结总结:不同服务实例,来共同提供服务的一组集合就是集群集群类型1、先看两个集群例子:nginx集群,redis集群2、然后总结1、对称集群 不同服务实例,功能地位相等(每一个实例提供的功能机会相同) 定位:数据计算,nginx集群(不存储任何状态)2、非对称集群 不同服务实例,功能地位不相等(每一个实例提供功能的机会不相同) 定位:数据存储,redis
2021-01-08 12:39:10
3676
原创 docker-入门、镜像容器、容器编排配置
4、docker 管理命令介绍builder Manage builds 管理构建config Manage Docker configs 管理配置container Manage containers 管理容器context Manage contexts 管理上下文engine Manage the docker engine 管理引擎image Manage images 管理镜像network Manage networks
2021-01-08 10:45:56
312
原创 netcore 高并发秒杀项目实战6
秒杀优化目标高并发,应用框架 :Redis+消息队列+Lua秒杀主要由两步逻辑组成扣减库存下单优化步骤consul缓存优化, 优化网络IO各个微服务节点缓存后,不需要每次请再去发现服务节点注意 当服务实例启动时,,当服务实例关闭时,及时更新缓存 。redis缓存方式扣减库存redis缓存操作较快,然后异步批量更新库存CAP消息队列异步下单应用CAP框架异步发送下单消息,订单微服务订阅消息批量下单单品限流可能超卖一个商品在1秒内的请求数量最多100个,主要是
2021-01-08 10:04:51
1932
2
原创 netcore 高并发秒杀项目实战5
秒杀下单性能优化方式一使用EFCore数据库连接池, 注意默认数据库连接池大小 为128, 使用时需要小于100.在连接串中指定连接池大小方式二加入扣减库存缓存内存缓存Redis缓存
2021-01-05 17:06:42
1064
原创 EFCore code first 总结
add migrations条件定义模型 /// <summary> /// 商品模型 /// </summary> public class Product { [Key] public int Id { set; get; } /// <summary> /// 商品编码 /// </summary> public s
2020-12-30 13:57:22
383
原创 netcore 高并发秒杀项目实战4
秒杀项目设计前台jquery 3.5bootstrapaspnetcore mvc 3.1中台aspnetcore webapi 3.1mysql 5.7秒杀前台设计秒杀页面详情页面支付页面订单页面秒杀中台设计微服务文件夹拆分ControllersDtosModelsPosServicesMigrationsRepositories概念Po,paramter object, webapi action 输入参数Dto,data transfe
2020-12-29 17:43:49
1068
2
原创 netcore 高并发秒杀项目实战3
需求分析,设计过程while(){ 从粗取精,去伪存真,由此及彼,由表及里}抽象结果通用结果包装Mvc filterIAsyncResultFilter通用异常结果包装IExceptionFilterBizException系统异常包装Json结果格式化通用用户封装模型绑定,IModelBinder,将httpcontext转换成user,将user绑定到action...
2020-12-29 16:09:47
551
原创 netcore 高并发秒杀项目实战2
微服务框架中台调用组件封装完成不同组件间的通信, HttpClient封装,inteface IMiddleService{MiddleResult Get(string url,IDictionary<string,object> param);MiddleResult Put(string url,IDictionary<string,object> param);MiddleResult Delete(string url,IDictionary<strin
2020-12-28 15:24:31
758
原创 高并发秒杀项目实战1
电商项目流程门店流程顾客-》选择商品-》进行支付-》生成订单电商流程用户-》选择商品-》进行支付-》生成订单用户-》选择商品-》预订单(未支付)-》进行支付-》修改订单(支付成功)定时器处理未支付订单支付是电商项目的核心,内核电商项目扩展商品-》购物车-》商品推荐分析项目的目的, 在目的上进行扩展,电商项目设计根据并发量进行设计,由于要支持2000W并发量,所以选择微服务架构如何拆分,先大后小, 先业务/系统,然后功能,最好读写客户端和聚合微服务关联,前台客户端,后台客户端
2020-12-28 12:48:54
513
原创 高并发秒杀电商系统分析与设计原则
什么是电商传统买东西消费者->>门店选择商品–>>付款—>发票网上买东西B2B:用户->>商品->>订单->>支付 , 卖一种商品B2C:用户->>商家->>商品->>订单->>支付个人电商平台电商什么是秒杀买票可以秒杀,抢红包也可以秒杀,网上购物也可以秒杀,场景较多在有限的时间抢有限的资源。1秒秒杀–》1分钟秒杀–》1小时秒杀 --》1天秒杀用户->>商品-
2020-12-28 10:57:09
442
原创 Redis 100问
什么是Redis?简述优缺点一个Key-Value类型的内存数据库优点Redis的性能非常出色,每秒可以处理超过 10万次读写操作支持保存多种数据结构 , string,hash,list,set,zset单个value的最大限 制是1GB,不像 memcached只能保存1MB的数据支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行缺点容量受到物理内存的限制redis相比memcached有哪些优势?支持数据类型:memcached所有的值均是简单
2020-12-24 15:16:28
267
原创 web性能优化
内存缓存AddMemoryCache分布式缓存Redis , AddDistributionRedisCachesqlserver,AddDistributionSqlserverCache响应缓存Http缓存规范AddResponseCachingAddHttpCacheHeaders
2020-12-24 11:58:38
167
原创 Sql调优2
锁和事务锁解决的问题,发生在数据库并发时脏读: read uncommitted,在事务还没有提交时候读取,事务可能回滚, 并发性最好不可重复读:read commited ,默认级别,幻读可重复读: 同一个事务里面发生不一致Repeatable read, 共享锁持有时间长,阻塞相对多,Serizable以上都由悲观锁实现Snapshot:乐观锁锁的大小行锁,粒度最小的锁级别页锁,表锁锁的模式排他锁,X锁,在写操作时使用,更新或者插入,事务结束后才释放共享锁,S锁
2020-12-24 09:31:05
203
原创 sqlserver 概念及优化
SQL Server 中的逻辑读与物理读预读:用估计信息,去硬盘读取数据到缓存。预读100次,也就是估计将要从硬盘中读取了100页数据到缓存。物理读:查询计划生成好以后,如果缓存缺少所需要的数据,让缓存再次去读硬盘。物理读10页,从硬盘中读取10页数据到缓存。逻辑读:从缓存中取出所有数据。逻辑读100次,也就是从缓存里取到100页数据。基本上,逻辑读、物理读、预读都等于是扫描了多少个页。第二次查询时,如果数据已经再缓存中了,那么只有逻辑读,没有物理读了,因为直接在缓存中可以找到这些数据
2020-12-23 11:18:04
471
原创 数据库调优
没有最大吞吐量合理的预期资源问题目标: 通过一系列的手段使得系统协调、平衡的运作,实现资源利用最大化阻塞运算符和非阻塞运算符逻辑运算符和物理运算符数据访问运算符表堆表聚集索引表扫描运算符表扫描聚集索引扫描非聚集索引扫描查找运算符索引没有覆盖,性能就有问题聚集索引查找非聚集索引查找关联运算符join, 嵌套循环合并连接哈希连接(散列连接)聚合运算符minmaxsum逻辑运算符物理运算符 ,流聚合,哈希聚合健壮的查询sql语句sele
2020-12-22 17:39:05
106
.netcore 文件系统与配置选项
2020-11-20
Sqlite codefirst 多文件
2020-09-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅