9 一线码农

尚未进行身份认证

我要认证

公众号 dotnetfly

等级
TA的排名 6w+

C# 9.0 终于来了, Top-level programs 和 Partial Methods 两大新特性探究

一:背景1. 讲故事.NET 5 终于在 6月25日 发布了第六个预览版,随之而来的是更多的新特性加入到了 C# 9 Preview 中,这个系列也可以继续往下写了,废话不多说,今天来看一下 Top-level programs 和 Extending Partial Methods 两大新特性。2. 安装必备下载最新的 .net 5 preview 6。下载最新的 Visual Studio 2019 version 16.7 Preview 3.1 二:新特性研究1. Top-leve

2020-06-27 11:51:58

Newtonsoft 六个超简单又实用的特性,值得一试 【下篇】

一:讲故事上一篇介绍的 6 个特性从园子里的反馈来看效果不错,那这一篇就再带来 6 个特性同大家一起欣赏。二:特性分析1. 像弱类型语言一样解析 json大家都知道弱类型的语言有很多,如: nodejs,python,php,它们有一个????????的地方就是处理json,不需要像 强类型语言 那样还要给它配一个类,什么意思呢? 就拿下面的 json 说事。{ "DisplayName": "新一代算法模型", "CustomerTyp

2020-06-23 07:18:41

Newtonsoft 六个超简单又实用的特性,值得一试 【上篇】

一:讲故事看完官方文档,阅读了一些 Newtonsoft 源码,对它有了新的认识,先总结 六个超经典又实用的特性,同大家一起分享,废话不多说,快来一起看看吧~二:特性分析1. 代码格式化如果你直接使用 JsonConvert.SerializeObject的话,默认情况下所有的json是挤压在一块的,特别不方便阅读,如下所示: static void Main(string[] args) { var reportModel = new Re

2020-06-21 08:54:28

对 JsonConvert 的认识太肤浅了,终于还是遇到了问题

一:背景1. 讲故事在开始本文之前,真的好想做个问卷调查,到底有多少人和我一样,对 JsonConvert 的认识只局限在 SerializeObject 和 DeserializeObject 这两个方法上(┬_┬), 这样我也好结伴同行,不再孤单落魄????????????,或许是这两个方法基本上能够解决工作中 80% 的场景,对于我来说确实是这样,但随着编码的延续,终究还是会遇到那剩下的 20% ,所以呀。。。我的场景是这样的:前段时间写业务代码的时候,我有一个自定义的客户算法类型的Model,

2020-06-19 08:09:28

HashSet扩容机制在时间和空间上的浪费,远大于你的想象

一:背景1. 讲故事自从这个纯内存项目进了大客户之后,搞得我现在对内存和CPU特别敏感,跑一点数据内存几个G的上下,特别没有安全感,总想用windbg抓几个dump看看到底是哪一块导致的,是我的代码还是同事的代码? 很多看过我博客的老朋友总是留言让我出一套windbg的系列或者视频,我也不会呀,没办法,人在江湖飘,迟早得挨上几刀,逼着也得会几个花架子????????????,废话不多说,这一篇就来看看 HashSet 是如何扩容的。二:HashSet的扩容机制1. 如何查看了解如何扩容,最好的办法

2020-06-17 08:42:04

foreach 集合又抛经典异常了,这次一定要刨根问底

一:背景1. 讲故事最近同事在写一段业务逻辑的时候,程序跑起来总是报:集合已修改;可能无法执行枚举操作,硬是没有找到什么情况下会导致这个异常产生,就让我来找一下bug,其实这个异常在座的每个程序员几乎都遇到过,谁也不是一生下就是大牛,简单看了下代码,确实是多线程操作foreach,但并没有对foreach进行Add,Remove操作,扫完代码其实我也是有点懵,没撤只能调试了,在foreach里套一层trycatch,查看异常的线程堆栈从而找出了问题代码,代码简化如下: static v

2020-06-15 07:48:32

C#9.0 终于来了,带你一起解读Pattern matching 和 nint 两大新特性玩法

一:背景1. 讲故事上一篇跟大家聊到了Target-typed new 和 Lambda discard parameters,看博客园和公号里的阅读量都达到了新高,甚是欣慰,不管大家对新特性是多头还是空头,起码还是对它抱有一种极为关注的态度,所以我的这个系列还得跟,那就继续开撸吧,今天继续带来两个新特性,更多新特性列表,请大家关注:新特性预览二:新特性研究1. Native ints从字面上看貌似是什么原生类型ints,有点莫名其妙,还是看一看Issues上举得例子吧:Summary: ni

2020-06-13 09:31:23

C#9.0 终于来了,您还学的动吗? 带上VS一起解读吧!

一:背景1. 讲故事好消息,.NET 5.0 终于在2020年6月10日发布了第五个预览版,眼尖的同学一定看到了在这个版本中终于支持了 C# 9.0,此处有掌声,太好了!!! .Net5官方链接可以看到目前的C#9还是预览版,实现了一部分新语法供开发者提前尝鲜,从github的roslyn仓库上可以看到目前准备实现 17个新特性,现阶段已经实现了8个,其中的 In Progress 表示正在开发中。新特性预览2. 安装必备下载最新的net5 sdk吧: dotnet-sdk-5.0.10

2020-06-12 07:00:03

MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试

一:背景1. 讲故事上一篇说了mysql的架构图,很多同学反馈说不过瘾,毕竟还是听我讲故事,那这篇就来说一说怎么利用visual studio 对 mysql进行源码级调试,毕竟源码面前,不谈隐私,圣人面前,皆为蝼蚁。二:工具合集mysql是C++写的,要想在windows上编译,还需要下载几个必备小工具。mysql-5.7.12.zipcmake-3.17.3-win64-x64.msiboost_1_59_0.tar.gzbison-2.4.1-setup.exewindows 10

2020-06-10 14:05:32

一个static和面试官扯了一个小时,舌战加强版

一:背景1. 讲故事最近也是奇怪,在社区里看到好几篇文章聊static 的玩法以及怎么拿这个和面试官扯半个小时,有点意思,点进去看都是java版的,这就没意思了,怎么也得有一篇和面试官扯C# 中的 static用法撒,既然没有人开这个头,那我就献丑了。。。,下面以QA的方式记述,大家可以代入一下能回答几个问题。二:QA环节面试官: 请问您都是在什么场景下用static的?解析: 可能面试官潜意识的想问问你会不会使用本地缓存。码农: 先不说我的场景,纵观C#的底层FCL源码,你会发现很多

2020-06-07 08:50:57

字符串太占内存了,我想了各种奇思淫巧对它进行压缩

一:背景1. 讲故事在我们的一个全内存项目中,需要将一家大品牌店铺小千万的trade灌入到内存中,大家知道trade中一般会有订单来源,省市区 ,当把这些字段灌进去后,你会发现他们特别侵蚀内存,因为都是字符串类型,不知道大家对内存侵蚀性是不是很清楚,我就问一个问题。Answer: 一个空字符串占用多大内存? 你知道吗?思考之后,下面我们就一起验证下,使用windbg去托管堆一查究竟,代码如下: static void Main(string[] args) {

2020-06-04 08:28:43

MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图

一:背景1. 讲故事最近看各大技术社区,不管是知乎,掘金,博客园,csdn基本上看不到有小伙伴分享sqlserver类的文章,看样子这些年sqlserver没落了,已经后继无人了,再写sqlserver是不可能再写了,这辈子都不会写了,只能靠技术输出mysql维持生活这样子。二:了解架构图mysql最大的好处就是开源, 手握百万源码,有什么问题搞不定呢? 这一点要比sqlserver爽多了,不用再dbcc捣来捣去。1. 从架构图入手大家都知道做/装修房子都要有一张图纸,其实软件也是一样,只要有了

2020-06-02 08:22:10

自定义值类型一定不要忘了重写Equals,否则性能和空间双双堪忧

一:背景1. 讲故事曾今在项目中发现有同事自定义结构体的时候,居然没有重写Equals方法,比如下面这段代码: static void Main(string[] args) { var list = Enumerable.Range(0, 1000).Select(m => new Point(m, m)).ToList(); var item = list.FirstOrDefault(m => m.Equals(new Point(in

2020-05-31 08:39:04

使用PInvoke互操作,让C#和C++愉快的交互优势互补

一:背景1. 讲故事如果你常翻看FCL的源码,你会发现这里面有不少方法借助了C/C++的力量让C#更快更强悍,如下所示: [DllImport("QCall", CharSet = CharSet.Unicode)] [SecurityCritical] [SuppressUnmanagedCodeSecurity] private static extern bool InternalUseRandomizedHashing(); [Dl

2020-05-29 08:20:46

阿里短信回持.net sdk的bug导致生产服务cpu 100%排查

一:背景1. 讲故事去年阿里聚石塔上的所有isv短信通道全部对接阿里通信,我们就做了对接改造,使用阿里提供的.net sdk。网址:https://help.aliyun.com/document_detail/114480.html同事当时使用的是ons-.net v1.1.3版本,程序上线后若干天就会有一次程序崩溃现象,当时也没特别在意,以为是自己代码或者环境出了什么问题,索性就加了一个检测程序,如果检测到sdk程序退出就自动重启,就这样先糊弄着,直到有一天服务器告警,那个程序CPU居然飙到10

2020-05-26 17:06:52

List的扩容机制,你真的明白吗?

一:背景1. 讲故事在前一篇大内存排查中,我们看到了Dictionary正在做扩容操作,当时这个字典的count=251w,你把字典玩的66飞起,其实都是底层为你负重前行,比如其中的扩容机制,当你遇到几百万甚至千万的大集合这个扩容机制还真的需要挖一下,免的入戏太深,难以自拔。为了方便讲述,我准备从List说起,因为它最简单哈????????????二:List扩容机制1. 如何查看要想看它的扩容机制,可以用ILSpy去看看List的源码即可,非常简单。从源码的 int num = (_it

2020-05-25 07:55:25

BitArray虽好,但请不要滥用,又一次线上内存暴增排查

一:背景1. 讲故事前天写了一篇大内存排查在园子里挺火,这是做自媒体最开心的事拉,干脆再来一篇满足大家胃口,上个月我写了一篇博客提到过使用bitmap对原来的List<CustomerID>进行高强度压缩,将原来的List内存压缩了将近106倍,但是bitmap不是一味的好,你必须在正确的场景中使用,而不是闭着眼睛滥用,bitmap在C#中对应的集合是BitArray。好像剧透了????????????,结果就是BitArray的滥用导致内存小10G的涨跌,不过这种东西重点还是看解决思路,

2020-05-22 07:53:04

记一次排查线上程序内存的忽高忽低,又是大集合惹祸了

一:背景1. 讲故事昨天继续还技术债,优化一轮后的程序拉到线上后内存继续忽高忽低,低的时候20G,高的时候30G,过了一会又下降了几个G,毫无疑问,程序中有什么集合或者什么操作占用了大量内存,所以准备在28,29G的时候抓dump分析分析。二:解决思路从快照中找问题就像看病一样,根据病象猜测,都有一套经验可循。1. 把托管堆中>10M的对象找出来通常应对大集合从托管堆入手最简单,看哪个类型占用空间大,基本就是它出问题了,为了避免把所有类型都打出来,这里设置一下过滤,把小于10M都踢掉, 可

2020-05-20 18:08:09

追了多年的开发框架,你还认识指针吗?

一:背景1. 讲故事高级语言玩多了,可能很多人对指针或者汇编都淡忘了,本篇就和大家聊一聊指针,虽然C#中是不提倡使用的,但你能说指针在C#中不重要吗?你要知道FCL内库中大量的使用指针,如String,Encoding,FileStream等等数不胜数,如例代码: private unsafe static bool EqualsHelper(string strA, string strB) { fixed (char* ptr = &strA.m_first

2020-05-16 09:58:11

还不明白可空类型原理? 我可要挖到底了

一:背景1. 讲故事下决心做好自媒体到现在有一个月了,关注我的兄弟应该知道我产出了不少文章,号里的粉丝也多起来了,我也尽最大努力做到有问必回,现在是基础的、高深的问题都接踵而来,可我也只是一只小菜鸟,想飞也飞不动了(┬_┬),昨天号里有位朋友被面试官问到可空类型的原理,回答的不好,面试官也是,面就面呗,又给不了多少银子,还动不动就原理,哪有那么多原理,搞得双方都尴尬????????????。二:给我锄头我要挖到底这种问题要怎么挖呢? 我在之前的文章也聊过,C#代码到机器码中间有两个编译过程,一个是c

2020-05-14 08:44:40

查看更多

勋章 我的勋章
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。