随笔分类 -  C#遗忘系列

摘要:一:背景 1. 讲故事 最近聊了不少和异步相关的话题,有点疲倦了,今天再写最后一篇作为近期这类话题的一个封笔吧,下篇继续写我熟悉的 生产故障 系列,突然亲切感油然而生,哈哈,免费给别人看程序故障,是一种积阴德阳善的事情,欲知前世因,今生受者是。欲知来世果,今生做者是。 在任务延续方面,我个人的总结就 阅读全文
posted @ 2025-01-09 14:55 一线码农 阅读(2070) 评论(7) 推荐(15) 编辑
摘要:一:背景 1. 讲故事 前面二篇我们聊到了 Thread.Sleep 和 Task.Result 场景下的线程注入逻辑,在线程饥饿的情况下注入速度都不是很理想,那怎么办呢?有没有更快的注入速度,这篇作为 动态注入 的终结篇,我个人总结如下两种方法,当然可能有更多的路子,知道的朋友可以在下面留言。 二 阅读全文
posted @ 2024-12-25 13:32 一线码农 阅读(1182) 评论(5) 推荐(7) 编辑
摘要:一:背景 1. 讲故事 上一篇我们用 Thread.Sleep 的方式演示了线程池饥饿场景下的动态线程注入,可以观察到大概 1s 产生 1~2 个新线程,很显然这样的增长速度扛不住上游请求对线程池的DDOS攻击,导致线程池队列越来越大,但C#团队这么优秀,能优化的地方绝对会给大家尽可能的优化,比如这 阅读全文
posted @ 2024-12-24 13:31 一线码农 阅读(605) 评论(1) 推荐(9) 编辑
摘要:一:背景 1. 讲故事 在线程饥饿的场景中,我们首先要了解的就是线程是如何动态注入的?其实现如今的ThreadPool内部的实现逻辑非常复杂,而且随着版本的迭代内部逻辑也在不断的变化,有时候也没必要详细的去了解,只需在稍微宏观的角度去理解一下即可,我准备用三篇来详细的聊一聊线程注入的流程走向来作为线 阅读全文
posted @ 2024-12-23 13:30 一线码农 阅读(738) 评论(2) 推荐(8) 编辑
摘要:一:背景 1. 讲故事 这些天计划好好研究下tcp/ip,以及socket套接字,毕竟工控中设计到各种交互协议,如果只是模模糊糊的了解,对分析此类dump还是非常不利的,而研究协议最好的入手点就是用抓包工具 wireshark,废话不多说,这篇通过 wireshark 提取一个小图片作为入手。 二: 阅读全文
posted @ 2023-11-16 14:39 一线码农 阅读(1195) 评论(1) 推荐(10) 编辑
摘要:## 一:背景 ### 1. 讲故事 如果要分析 Linux上的 .NET程序 CPU 爆高,按以往的个性我肯定是抓个 dump 下来做事后分析,这种分析模式虽然不重但也不轻,还需要一定的底层知识,那有没有傻瓜式的 CPU 爆高分析方式呢? 相信有很多朋友知道 **B站713事件**,最终就是用 p 阅读全文
posted @ 2023-07-18 09:45 一线码农 阅读(997) 评论(2) 推荐(7) 编辑
摘要:一:背景 1.讲故事 最近遇到了好几起和 COM 相关的Dump,由于对 COM 整体运作不是很了解,所以分析此类dump还是比较头疼的,比如下面这个经典的 COM 调用栈。 0:044> ~~[138c]s win32u!NtUserMessageCall+0x14: 00007ffc`5c891 阅读全文
posted @ 2022-10-17 14:58 一线码农 阅读(5500) 评论(11) 推荐(27) 编辑
摘要:一:背景 最近发现 C++ 中的类型初始化操作,没有 {} 运算符搞不定的,蛮有意思,今天我们就来逐一列一下各自的用法以及汇编展现,本来想分为 值类型 和 引用类型 两大块,但发现在 C++ 中没这种说法,默认都是 值类型 😂😂😂 二:各种玩法一览 1. int 上的初始化 首先看一下代码: 阅读全文
posted @ 2022-07-11 09:09 一线码农 阅读(2635) 评论(1) 推荐(1) 编辑
摘要:最近在看 C++ 的虚方法调用实现原理,大概就是说在 class 的首位置存放着一个指向 vtable array 指针数组 的指针,而 vtable array 中的每一个指针元素指向的就是各自的 虚方法,实现方式很有意思,哈哈,现在我很好奇 C# 中如何实现的。 一: C# 中的多态玩法 1. 阅读全文
posted @ 2022-06-01 11:42 一线码农 阅读(3470) 评论(1) 推荐(15) 编辑
摘要:这个问题在微信上被别人问过好多次,想来想去觉得有必要统一解答下,先说下我的答案:可能会,也有可能不会。 要想寻找答案,需要从 异步处理 的底层框架说起。 一:异步底层是什么 异步 从设计层面上来说它就是一个 发布订阅者 模式,毕竟它的底层用到了 端口完成队列,可以从 IO完成端口内核对象 所提供的三 阅读全文
posted @ 2022-04-01 10:08 一线码农 阅读(4436) 评论(8) 推荐(23) 编辑
摘要:一:背景 1. 讲故事 最近在分析一个 dump 的过程中发现其在 gen2 和 LOH 上有不少size较大的free,仔细看了下,这些free生前大多都是模板引擎生成的html片段的byte[]数组,当然这篇我不是来分析dump的,而是来聊一下,当托管堆有很多length较大的 byte[] 数 阅读全文
posted @ 2021-09-01 09:35 一线码农 阅读(1514) 评论(16) 推荐(7) 编辑
摘要:一:背景 相信很多人都知道通过 任务管理器 抓取dump,虽然简单粗暴,但无法满足程序的无数种死法,比如: 内存膨胀,程序爆炸 CPU爆高,程序累死 应用无响应,用户气死 意外退出,和人生一样 既然手工太弱鸡,那有什么好的工具呢? 除了 adplus,本文推荐一款神器 procdump, 下载地址: 阅读全文
posted @ 2021-04-15 09:32 一线码农 阅读(5417) 评论(22) 推荐(38) 编辑
摘要:一:背景 1. 讲故事 这段时间项目延期,加班比较厉害,博客就稍微停了停,不过还是得持续的技术输出呀! 园子里最近挺热闹的,精致码农大佬分享了三篇文章: 为什么要小心使用 Task.Run [https://www.cnblogs.com/willick/p/14078259.html] 小心使用 阅读全文
posted @ 2020-12-09 10:13 一线码农 阅读(6165) 评论(31) 推荐(40) 编辑
摘要:一:背景 1. 讲故事 昨天群里有位朋友问:linq 查询的结果会开辟新的内存吗?如果开了,那是对原序列集里面元素的深拷贝还是仅仅拷贝其引用? 其实这个问题我觉得问的挺好,很多初学 C# 的朋友或多或少都有这样的疑问,甚至有 3,4 年工作经验的朋友可能都不是很清楚,这就导致在写代码的时候总是会畏手 阅读全文
posted @ 2020-12-01 17:51 一线码农 阅读(1997) 评论(8) 推荐(10) 编辑
摘要:一:背景 1. 讲故事 前几天公号里有一位朋友留言说,你windbg玩的溜,能帮我分析下被 ThreadStatic 修饰的变量到底存放在哪里吗?能不能帮我挖出来😂😂😂,其实这个问题问的挺深的,玩高级语言的朋友相信很少有接触到这个的,虽然很多朋友都知道这个特性怎么用,当然我也没特别研究这个,既 阅读全文
posted @ 2020-11-24 09:28 一线码农 阅读(2675) 评论(4) 推荐(13) 编辑
摘要:一:背景 1. 讲故事 这几天都在修复bug真的太忙了,期间也遇到了一个挺有趣bug,和大家分享一下,这是一块sql挺复杂的报表相关业务,不知道哪一位大佬在错综复杂的 嵌套 + 平行 if判断中sql拼接在某些UI组合下出问题了,最终的 sql 架构类似这样的。 var sql = "select 阅读全文
posted @ 2020-11-21 14:07 一线码农 阅读(2538) 评论(7) 推荐(3) 编辑
摘要:一:背景 1. 讲故事 周五下午运营反馈了一个紧急bug,说客户那边一个信息列表打不开,急需解决,附带的日志文件也发过来了,看了下日志大概是这样的: 日期:2020-11-13 12:25:45,923 线程ID:[3924] 日志级别:INFO 错误类:xxx property:[(null)] 阅读全文
posted @ 2020-11-17 12:26 一线码农 阅读(6117) 评论(32) 推荐(44) 编辑
摘要:一:背景 1. 讲故事 这两天工作上太忙没有及时持续的文章产出,和大家说声抱歉,前几天群里一个朋友在问什么时候可以产出 Span 的下一篇,哈哈,这就来啦!读过上一篇的朋友应该都知道 Span 统一了 .NET 程序 栈 + 托管 + 非托管 实现了三大块内存的统一访问,🐂👃,而且在 .net 阅读全文
posted @ 2020-11-14 19:56 一线码农 阅读(3673) 评论(12) 推荐(16) 编辑
摘要:一:背景 1. 讲故事 前几天在项目中用 MemoryStream 的时候意外发现 ReadAsync 方法多了一个返回 ValueTask 的重载,真是日了狗了,一个 Task 已经够学了,又来一个 ValueTask,晕,方法签名如下: public class MemoryStream : S 阅读全文
posted @ 2020-11-10 12:03 一线码农 阅读(2530) 评论(11) 推荐(15) 编辑
摘要:一:背景 1. 讲故事 最近在翻 netcore 源码看,发现框架中有不少的代码都被 ref 给修饰了,我去,这还是我认识的 ref 吗?就拿 Span 来说,代码如下: public readonly ref struct Span<T> { public ref T GetPinnableRef 阅读全文
posted @ 2020-11-07 09:21 一线码农 阅读(5610) 评论(10) 推荐(28) 编辑

点击右上角即可分享
微信分享提示