随笔分类 -  C#遗忘系列

摘要:昨天发现线上试跑期的一个程序挂了,平时都跑的好好的,查了下日志是因为昨天运营跑了一家美妆top级淘品牌店,会员量近千万,一下子就把128G的内存给爆了,当时并行跑了二个任务,没辙先速写一段代码限流,后面再做进一步优化。 一: 背景 1. 背景介绍 因为是自己写的代码,所以我知道问题出现在哪里,如果大 阅读全文
posted @ 2020-04-27 07:41 一线码农 阅读(3606) 评论(16) 推荐(21) 编辑
摘要:现代程序员写代码没有人敢说自己没用过泛型,这个泛型模板T可以被任何你想要的类型替代,确实很魔法很神奇,很多人也习以为常了,但就是这么有趣的泛型T底层到底是怎么帮你实现的,不知道有多少人清楚底层玩法,这篇我就试着来分享一下,不一定全对哈。。。 一:没有泛型前 现在的netcore 3.1和最新的.ne 阅读全文
posted @ 2020-04-24 01:11 一线码农 阅读(4493) 评论(39) 推荐(28) 编辑
摘要:昨天有朋友在公众号发消息说看不懂await,async执行流,其实看不懂太正常了,因为你没经过社会的毒打,没吃过牢饭就不知道自由有多重要,没生过病就不知道健康有多重要,没用过ContinueWith就不知道await,async有多重要,下面我举两个案例佐证一下? 一:案例一 【嵌套下的异步】 写了 阅读全文
posted @ 2020-04-22 16:17 一线码农 阅读(7589) 评论(38) 推荐(16) 编辑
摘要:在并行编程中,经常会遇到多线程间操作共享集合的问题,很多时候大家都很难逃避这个问题做到一种无锁编程状态,你也知道一旦给共享集合套上lock之后,并发和伸缩能力往往会造成很大影响,这篇就来谈谈如何尽可能的减少lock锁次数甚至没有。 一:缘由 1. 业务背景 昨天在review代码的时候,看到以前自己 阅读全文
posted @ 2020-04-21 17:20 一线码农 阅读(1959) 评论(9) 推荐(5) 编辑
摘要:前几天一位朋友去面试,面试官问了他同步,异步,多线程之间是什么关系,异步比同步高效在哪?多线程比单线程高效在哪?由于回答的不好,让我帮他捋一下,其实回答这个问题不难,难就难在只对别人说理论,而没有现杀的例子。 一:异步 1. 到底解放了谁? 从基础的同步说起 要说解放了谁,一定得有几个参与者,举个例 阅读全文
posted @ 2020-04-20 18:57 一线码农 阅读(3870) 评论(10) 推荐(22) 编辑
摘要:一:背景 昨天在看C 函数式编程这本书的时候,有一处让我干着急,需求是这样: 给多行文字加上数字列表项。 针对这个需求你会如何快捷高效的给每个项目加上数字编号呢? 我看书中是这样实现的,如下代码 怎么说呢,需求能实现没有问题,但这里还是累赘了,因使用到了拉链函数Zip 和生成范围的Range,全纠缠 阅读全文
posted @ 2020-04-17 14:44 一线码农 阅读(1630) 评论(6) 推荐(7) 编辑
摘要:说到lock锁,我相信在座的各位没有不会用的,而且还知道怎么用不会出错,但让他们聊一聊为什么可以锁住,都说人以群分,大概就有了下面低中高水平的三类人吧。 第一类人 将lock对象定义成static,这样就能让多个线程看到同一个对象,以此实现线程间互斥和保证同步,如果再深问为什么?就怕遮遮掩掩的说好像 阅读全文
posted @ 2020-04-16 22:01 一线码农 阅读(2863) 评论(6) 推荐(12) 编辑
摘要:如果大家读过dapper源码,你会发现这内部有很多方法都用到了yield关键词,那yield到底是用来干嘛的,能不能拿掉,拿掉与不拿掉有多大的差别,首先上一段dapper中精简后的Query方法,先让大家眼见为实。 一:yield探究 1. 骨架代码猜想 骨架代码其实很简单,方法的返回值是IEnum 阅读全文
posted @ 2020-04-15 16:55 一线码农 阅读(3152) 评论(1) 推荐(12) 编辑
摘要:在平时开发中经常会看到有些朋友或者同事在写代码时会充斥着各种for,foreach,这种程式代码太多的话阅读性特别差,而且还显得特别累赘,其实在FCL中有很多帮助我们提高阅读感的方法,而现实中很多人不会用或者说不知道,这篇我就跟大家聊一聊。 一:SelectMany 这个方法绝对是提高开发速度的一大 阅读全文
posted @ 2020-04-14 13:25 一线码农 阅读(3302) 评论(5) 推荐(12) 编辑
摘要:知道为什么要用内插字符串,只有踩过坑的人才能明白,如果你曾今使用string.format超5个以上占位符,那其中的痛苦我想你肯定是能够共鸣的。 一:痛苦经历 先上一段曾今写过的一段代码,大家来体会一下: 这里拥有多达8个占位符,当年写这个的时候,会有三个痛点。 1. 占位符不能写错了 比如这里的 阅读全文
posted @ 2020-04-11 13:40 一线码农 阅读(3714) 评论(25) 推荐(14) 编辑
摘要:很多小步快跑的公司,开发人员多则3-4个,面对巨大业务压力,日连夜的赶着上线,快速试错,自然就没时间搭建一些基础设施,比如说logCenter,但初期 项目不稳定,bug又多,每次都跑到生产去找日志,确实也不大方便,用elk或者用hadoop做日志中心,虽然都是没问题的,但基于成本和人手还是怎么简化 阅读全文
posted @ 2018-06-01 08:41 一线码农 阅读(6486) 评论(6) 推荐(15) 编辑
摘要:前些天和我们的一个邮件服务商对接,双方需要进行一些通讯,对方是java团队,而作为.net团队的我们,只能公布出去的是一个wcf的basicbinding,想不 到问题来了,对方不知道怎么去调用这个basic,可能他们水平有点菜,有点尴尬,不得已我来研究研究,其实只要知道公布的wsdl,对什么语言都 阅读全文
posted @ 2017-08-09 23:14 一线码农 阅读(13420) 评论(13) 推荐(7) 编辑
摘要:说起Parallel.For大家都不会陌生,很简单,不就是一个提供并行功能的for循环吗? 或许大家平时使用到的差不多就是其中最简单的那个重载方法,而真实情况 下Parallel.For里面有14个重载,而其中那些比较复杂的重载方法,或许还有同学还不知道怎么用呢~~~ 刚好我最近我有应用场景了,给大 阅读全文
posted @ 2017-03-23 13:05 一线码农 阅读(8052) 评论(6) 推荐(11) 编辑
摘要:一般我们发布项目的时候通常都会采用release版本,因为release会在jit层面对我们的il代码进行了优化,比如在迭代和内存操作的性能提升方面,废话不多说, 我先用一个简单的“冒泡排序”体验下release和debug下面的性能差距。 一:release带来的闪光点【冒泡排序】 这个是我多年前 阅读全文
posted @ 2017-03-20 09:37 一线码农 阅读(5117) 评论(20) 推荐(14) 编辑
摘要:最近在看一个同事的代码,代码的本意是在main方法中开启10个线程,用这10个线程来处理一批业务逻辑,在某一时刻当你命令console退出的时候,这个 时候不是立即让console退出,而是需要等待10个线程把检测状态之后的业务逻辑执行完之后再退出,这样做是有道理的,如果强行退出会有可能造成子线程的 阅读全文
posted @ 2017-03-13 09:26 一线码农 阅读(6337) 评论(23) 推荐(28) 编辑
摘要:最近在做taobao的一个卖家应用,需要订阅taobao的订单推送,示例代码如下:看到上面的OnMessage场景之后,我突然就鬼使神差的在想最近写的一个服务,其中的一个功能是需要定时的轮询一个集合,这样可以方便的把数据取出来,但是轮训对我来说是被迫的,我急迫需要一种机制对一个集合的数据... 阅读全文
posted @ 2015-06-06 15:48 一线码农 阅读(10098) 评论(9) 推荐(5) 编辑
摘要:终于写到终结篇了,整个人像在梦游一样,说完这一篇我得继续写我的js系列啦。一:带索引的对象初始化器 还是按照江湖老规矩,先扒开看看到底是个什么玩意。1 static void Main(string[] args)2 {3 Diction... 阅读全文
posted @ 2014-12-23 23:24 一线码农 阅读(6632) 评论(9) 推荐(6) 编辑
摘要:接着上篇继续扯,其实语法糖也不是什么坏事,第一个就是吃不吃随你,第二个就是最好要知道这些糖在底层都做了些什么,不过有一点叫眼见为实,这样才能安心的使用,一口气上五楼,不费劲。一:字符串嵌入值 我想String.Format方法就是化成灰大家都认识,比如下面代码:1 class Bird... 阅读全文
posted @ 2014-12-22 23:04 一线码农 阅读(9796) 评论(8) 推荐(13) 编辑
摘要:今天没事,就下了个vs2015 preview,前段时间园子里面也在热炒这些新的语法糖,这里我们就来看看到底都会生成些什么样的IL?一:自动初始化属性 确实这个比之前的版本简化了一下,不过你肯定很好奇,到底编译器给我们做了哪些东西呢?1 class Student2 {3 ... 阅读全文
posted @ 2014-12-22 00:49 一线码农 阅读(7062) 评论(19) 推荐(13) 编辑
摘要:这几天太忙没时间写博客,今天回家就简单的看了下ThreadPool的源码,发现有一个好玩的东西,叫做”执行上下文“,拽名叫做:”ExecutionContext“。一:ThreadPool的大概流程。第一步:它会调用底层一个helper方法。第二步:走进这个helper方法,我们会发现有一个队列... 阅读全文
posted @ 2014-11-06 01:22 一线码农 阅读(5686) 评论(21) 推荐(14) 编辑