随笔分类 - .NET
摘要:死锁的示例 下面就是一个会死锁的示例代码: // 异步死锁示例 - 不使用 TaskScheduler,仅用多个 Task 互相等待 Console.WriteLine(" 多 Task 互相等待死锁 \n"); // 两个任务互相用 .Result 等待对方完成 → 死锁 var tcsA = n
阅读全文
摘要:再次遇到dotnet的第三方组件问题,就是hangfire的CoreBackgroundJobPerformer会导致死锁,它是作为hagnfire服务端的job执行器的,它非常的关键,是job能够运行的关键,这些库可能读是从很早的dotnetfremework时代移植过来的(我猜测的),同样的存在
阅读全文
摘要:缓存通常用于提高数据访问的效率。一般来说,缓存读取和写入的逻辑遵循“先从缓存取,取不到再从数据库获取并写回缓存”的原则。为了避免多个线程同时修改缓存数据,我们需要加锁来保证数据一致性。 逻辑概述 读取缓存:缓存命中直接返回。 缓存未命中:加锁,然后再次读取缓存,缓存命中直接返回。 缓存还是未命中:执
阅读全文
摘要:一般情况下我们业务代码不需要自己捕获异常,因为目前我们常用框架都会自行处理异常,但是有些情况下需要自己处理异常,否则未处理的异常抛出会导致程序崩溃退出。 1.全局异常捕获 // 1. AppDomain 未处理异常 AppDomain.CurrentDomain.UnhandledException
阅读全文
摘要:继续写点基础的东西,因为基础的东西能带新手入门,入门后的事情其实是比较简单的。 我们开发dotnet程序后运行时经常出问题,比如cpu高、内存高、崩溃等问题,分析的方法就是使用dotnet的那套分析工具,今天以dotnet-dump为例,简单说下从安装到收集的操作步骤。 1.安装SDK dotnet
阅读全文
摘要:dotnet10发布了,ef10也快发布了,但是还是只有批量更新(ExecuteUpdateAsync)和批量删除(ExecuteDeleteAsync)功能,没有批量插入。 今天给个办法,在不引用第三方库的情况下,巧妙利用ToQueryString()实现批插。 道理很简单,就是用efcore的T
阅读全文
摘要:dm库相比其他库本身缺少一些语法差异,也可以说是缺陷。 比如: 0和1无法直接在sql中当作真假值用,where 0这种写法不支持,报错:查询使用值表达式作为过滤条件; t.field is null 也无法直接作为select项; 不支持OUTER APPLY等SQL语法; 以及数据库函数中的又只
阅读全文
摘要:1.性能问题-批量多次读写、序列化和反序列化的场景 注意看到dotnet下的IDistributedCache接口内部方法声明都是针对单个key的,当需要多次大量读写同一类型kv值时,存在多次连接redis的情况,导致性能特别慢。 在abp框架中AbpRedisCache有些SetMany和GetM
阅读全文
摘要:需求:在多个方法前后输出日志 logger.Info("begin"); method(); logger.Info("end"); 如果需要在方法后输出日志同时加上时长 logger.Info("begin"); var sw= Stopwatch.StartNew(); method(); sw
阅读全文
摘要:这个计算是否准备,或者差不多也行,我理解是差不多的 Process.GetCurrentProcess().WorkingSet64 - Gc.GetGCMemoryInfo().HeapSizeBytes
阅读全文
摘要:比较水的文章,非常的基础,就当是记录下吧! 1.关于在集合中搜索带来的性能问题,建议用字典(Dictionary) 很多时候需要在一个集合如List中按唯一键查找某个对象,如果用Where扩展方法或者find等方法,是很慢的,特别是大量这样的查找就特别慢。 如果是对集合中的每个数据都要做点什么,那么
阅读全文
摘要:1. 问题 环境是dotnet8及以前的版本,dotnet9+不知道是否还有这个问题(我猜是一样的)。 如下代码,在多播委托await异步执行时,不会等待委托方法执行完成,它们在新的线程中运行。 async Task A() { } async Task B() { } Func<Task> fun
阅读全文
摘要:本文基于efcore8.0,参考文档。 假设需要重写efcore或者特定数据库的方法的SQL转换,按上面文档及其示例代码,本例中我们大概就是提供下面几个接口的实现。 IMethodCallTranslator IMethodCallTranslatorPlugin IDbContextOptions
阅读全文
摘要:C#9.0是2020年发布的,record特性还没用上的可以看过来,一起讨论下。 下面通过一个简单的示例演示record带来的好处。 1. 通过一个示例引出问题 public class Person { public string Name { get; set } ... } public cl
阅读全文
摘要:如题,当CultureInfo是俄文(ru-RU)时,浮点数中的点是用逗号表达的,如1.1会显示成1,1,造成很多的麻烦,当然如果全系统中全部采纳逗号作为浮点也没问题,只要用户接受就可以,但有时需要继续用点号,那么解决办法如下。 1. 修改DefaultThreadCurrentCulture 我们
阅读全文
摘要:如题 hangfire.entityframeworkcore这个库因为System.Threading.Timer未停止也未释放,导致产生大量的Timer一直在执行,占用大量cpu和内存。 https://github.com/sergezhigunov/Hangfire.EntityFramew
阅读全文
摘要:1. 问题 达梦dotnet efcore的驱动DM.Microsoft.EntityFreameworkCore。 如果实体中存在DateTimeOffset类型字段时,查询报错:invalid cast from DateTime to DateTimeOffset。 Invalid cast
阅读全文
摘要:达梦数据库的DOTNET驱动DM.Provider,这个版本8.3.1.30495有bug,会把空字符串改成DBNull处理,反编译代码发现Dm.DmSetValue.SetString方法中判断字符串长度==0就设置成DBNull。 解决办法就是 降低版本到8.3.1.28188。 // Dm.D
阅读全文
摘要:工作中经常遇到性能问题,包括cpu和内存占用高等问题,还有经常想监控当前程序运行情况,如代码运行频次、耗时、占用cpu和内存情况等。基本都是要从dump等诊断工具或者日志去分析,操作麻烦。 今年初就思考是否可以做这样的一个更加方便的工具,可以线上实时分析诊断dotnet程序,并给出结果或者建议,也可
阅读全文
摘要:问题 Abp vNext框架,后台服务使用IStringLocalizer获得翻译时,与设置的“Abp.Localization.DefaultLanguage”不一致,一直是按服务器的本地语言来的。 分析 Abp中重写了IStringLocalizer,Abp源码简化如下。 public clas
阅读全文
浙公网安备 33010602011771号