随笔分类 - C#遗忘系列
摘要:一:背景 1. 讲故事 最近同事在写一段业务逻辑的时候,程序跑起来总是报:集合已修改;可能无法执行枚举操作,硬是没有找到什么情况下会导致这个异常产生,就让我来找一下bug,其实这个异常在座的每个程序员几乎都遇到过,谁也不是一生下就是大牛,简单看了下代码,确实是多线程操作foreach,但并没有对fo
阅读全文
摘要:一:背景 1. 讲故事 上一篇跟大家聊到了Target-typed new 和 Lambda discard parameters,看博客园和公号里的阅读量都达到了新高,甚是欣慰,不管大家对新特性是多头还是空头,起码还是对它抱有一种极为关注的态度,所以我的这个系列还得跟,那就继续开撸吧,今天继续带来
阅读全文
摘要:一:背景 1. 讲故事 好消息,.NET 5.0 终于在2020年6月10日发布了第五个预览版,眼尖的同学一定看到了在这个版本中终于支持了 C# 9.0,此处有掌声,太好了!!! .Net5官方链接 可以看到目前的C#9还是预览版,实现了一部分新语法供开发者提前尝鲜,从github的roslyn仓库
阅读全文
摘要:一:背景 1. 讲故事 最近也是奇怪,在社区里看到好几篇文章聊static的玩法以及怎么拿这个和面试官扯半个小时,有点意思,点进去看都是java版的,这就没意思了,怎么也得有一篇和面试官扯C#中的 static用法撒,既然没有人开这个头,那我就献丑了。。。,下面以QA的方式记述,大家可以代入一下能回
阅读全文
摘要:一:背景 1. 讲故事 在我们的一个全内存项目中,需要将一家大品牌店铺小千万的trade灌入到内存中,大家知道trade中一般会有订单来源,省市区 ,当把这些字段灌进去后,你会发现他们特别侵蚀内存,因为都是字符串类型,不知道大家对内存侵蚀性是不是很清楚,我就问一个问题。 Question: 一个空字
阅读全文
摘要:一:背景 1. 讲故事 曾今在项目中发现有同事自定义结构体的时候,居然没有重写Equals方法,比如下面这段代码: static void Main(string[] args) { var list = Enumerable.Range(0, 1000).Select(m => new Point
阅读全文
摘要:一:背景 1. 讲故事 如果你常翻看FCL的源码,你会发现这里面有不少方法借助了C/C++的力量让C#更快更强悍,如下所示: [DllImport("QCall", CharSet = CharSet.Unicode)] [SecurityCritical] [SuppressUnmanagedCo
阅读全文
摘要:一:背景 1. 讲故事 去年阿里聚石塔上的所有isv短信通道全部对接阿里通信,我们就做了对接改造,使用阿里提供的.net sdk。 网址:https://help.aliyun.com/document_detail/114480.html 同事当时使用的是ons-.net v1.1.3版本,程序上
阅读全文
摘要:一:背景 1. 讲故事 在前一篇大内存排查中,我们看到了Dictionary正在做扩容操作,当时这个字典的count=251w,你把字典玩的66飞起,其实都是底层为你负重前行,比如其中的扩容机制,当你遇到几百万甚至千万的大集合这个扩容机制还真的需要挖一下,免的入戏太深,难以自拔。 为了方便讲述,我准
阅读全文
摘要:一:背景 1. 讲故事 前天写了一篇大内存排查在园子里挺火,这是做自媒体最开心的事拉,干脆再来一篇满足大家胃口,上个月我写了一篇博客提到过使用 对原来的 进行高强度压缩,将原来的List内存压缩了将近106倍,但是bitmap不是一味的好,你必须在正确的场景中使用,而不是闭着眼睛滥用,bitmap在
阅读全文
摘要:一:背景 1. 讲故事 昨天继续还技术债,优化一轮后的程序拉到线上后内存继续忽高忽低,低的时候20G,高的时候30G,过了一会又下降了几个G,毫无疑问,程序中有什么集合或者什么操作占用了大量内存,所以准备在28,29G的时候抓dump分析分析。 二:解决思路 从快照中找问题就像看病一样,根据病象推测
阅读全文
摘要:一:背景 1. 讲故事 高级语言玩多了,可能很多人对指针或者汇编都淡忘了,本篇就和大家聊一聊指针,虽然C 中是不提倡使用的,但你能说指针在C 中不重要吗?你要知道FCL内库中大量的使用指针,如 等等数不胜数,如例代码: 对,你觉得的美好世界,其实都是别人帮你负重前行,退一步说,指针的理解和不理解,对
阅读全文
摘要:一:背景 1. 讲故事 下决心做好自媒体到现在有一个月了,关注我的兄弟应该知道我产出了不少文章,号里的粉丝也多起来了,我也尽最大努力做到有问必回,现在是基础的、高深的问题都接踵而来,可我也只是一只小菜鸟,想飞也飞不动了(┬_┬),昨天号里有位朋友被面试官问到可空类型的原理,回答的不好,面试官也是,面
阅读全文
摘要:一:背景 1. 讲故事 在项目中摸爬滚打几年,应该或多或少的见过有人把异常当做业务逻辑处理的情况(┬_┬),比如说判断一个数字是否为整数,就想当然的用try catch 包起来,再进行 int.Parse,如果抛异常就说明不是整数,简单粗暴,也不需要写正则或者其他逻辑,再比如一个字符串强制转化为En
阅读全文
摘要:一:背景 1. 讲故事 前几天公众号里有位兄弟看了几篇文章之后,也准备用windbg试试看,结果这一配就花了好几天,(づ╥﹏╥)づ,我想也有很多跃跃欲试的朋友在配置的时候肯定会遇到这样和那样的问题,所以我觉得有必要整理一下,让大家少走弯路。 二:一些基础概念 1. 在哪下载 现在安装windbg越来
阅读全文
摘要:一:背景 1. 讲故事 我们有一家top级的淘品牌店铺,为了后续的加速计算,在程序启动的时候灌入她家的核心数据到内存中,灌入完成后内存高达100G,虽然云上的机器内存有256G,然被这么划掉一半看着还是有一点心疼的,可怜那些被挤压的小啰啰程序😄😄😄,本以为是那些List,HashSet,Dic
阅读全文
摘要:不知道何时开始,很多程序员喜欢用ToLower,ToUpper去实现忽略大小写模式的字符串相等性比较,有可能这个习惯是从别的语言引进的,大胆猜测下是JS,为了不引起争论,我指的JS是技师的意思~ 一:背景 1. 讲故事 在我们一个订单聚合系统中,每一笔订单都会标注来源,比如JD,Taobao,Eta
阅读全文
摘要:大家在平时开发中大多都会遵循接口编程,这样就可以方便实现依赖注入也方便实现多态等各种小技巧,但这种是以牺牲性能为代价换取代码的灵活性,万物皆有阴阳,看你的应用场景进行取舍。 一:背景 1. 缘由 在项目的性能改造中,发现很多方法签名的返回值都是采用IEnumerable接口,比如下面这段代码: 2.
阅读全文
摘要:如果你经常看开源项目的源码,你会发现很多Dispose方法中都有这么一句代码: ,看过一两次可能无所谓,看多了就来了兴趣,这篇就跟大家聊一聊。 一:背景 1. 在哪发现的 相信现在Mysql在.Net领域中铺的面越来越广了,C 对接MySql的MySql.Data类库的代码大家可以研究研究,几乎所有
阅读全文
摘要:昨天看群里在讨论C 中的string驻留池,炒的火热,几轮下来理论一堆堆,但是在证据提供上都比较尴尬。虽然这东西很基础,但比较好的回答也不是那么容易,这篇我就以我能力范围之内跟大家分享一下 一:无处不在的池 开发这么多年,相信大家对‘池’ 这个概念都耳熟能详了,连接池,线程池,对象池,还有这里的驻留
阅读全文