摘要: 程序员都知道,在生产环境中,如果没有系统日志,对问题的分析将非常的困难。即使有日志,有时候也会因为日志记录的不全面,而导致问题不能分析清楚。其实,Windbg里面有Live Debug功能,正好可以借鉴应用。 本文介绍使用Windbg在.net程序中设置断点调试的方法。Windbg在Native C 阅读全文
posted @ 2019-05-16 11:01 凌晨三点半 阅读(681) 评论(0) 推荐(1) 编辑
摘要: 问题: 在VS2017中新建空的单元测试后,无法运行测试,即右键菜单的“运行测试”和“调试测试” 不能运行,在测试资源管理中也无法列出这个测试。解决方案:1.打开Packages.config文件,移除MSTest相关的两个nuget包引用。2.在Test项目中重新增加MSTest.TestAdapter和MSTest.TestFramework的引用即可,注意要选择匹配的版本。 阅读全文
posted @ 2018-09-17 10:55 凌晨三点半 阅读(4046) 评论(0) 推荐(1) 编辑
摘要: 最近在为公司的分布式服务框架做支持异步调用的开发,这种新特性的上线需要进行各种严格的测试。在并发性能测试时,性能一直非常差,而且非常的不稳定。经过不断的分析调优,发现Socket通信和多线程异步回调存在较为严重的性能问题。经过多方优化,性能终于达标。下面是原版本、支持异步最初版本和优化后版本的性能比 阅读全文
posted @ 2018-06-15 14:50 凌晨三点半 阅读(7148) 评论(1) 推荐(3) 编辑
摘要: 在互联网应用中,流量洪峰是常有的事情。在应对流量洪峰时,通用的处理模式一般有排队、限流,这样可以非常直接有效的保护系统,防止系统被打爆。另外,通过限流技术手段,可以让整个系统的运行更加平稳。今天要与大家分享一下限流算法和C#版本的组件。 一、令牌桶算法: 令牌桶算法的基本过程如下: 工作过程包括3个 阅读全文
posted @ 2018-05-17 09:42 凌晨三点半 阅读(5962) 评论(16) 推荐(35) 编辑
摘要: 当DataGridView的DataSource是DataTable的时候,DataTable的数据改变时,DataGridView的数据会随之改变,无需重新绑定到DataGridView。 当DataGridView的DataSource是泛型List,当List的数据改变时,则需要先将DataGridView的DataSource设置为new List(),再将改变后的List赋给... 阅读全文
posted @ 2018-03-07 14:00 凌晨三点半 阅读(11380) 评论(1) 推荐(0) 编辑
摘要: 最近在和小伙伴们做充电与通信程序的架构迁移。迁移前的架构是,通信程序负责接收来自充电集控设备的数据实时数据,通过Thrift调用后端的充电服务,充电服务收到响应后放到进程的Queue中,然后在管理线程的调度下,启动多线程进程数据处理。 随着业务规模的不断扩大和对系统可用性的逐步提高。现在这个架构存在 阅读全文
posted @ 2017-12-23 12:48 凌晨三点半 阅读(2824) 评论(7) 推荐(6) 编辑
摘要: 线程池和Task是多线程编程中两个经常使用的技术,大家在熟悉不过了。他们有什么关联关系?Task又是怎么工作的呢?估计很多时候会犯糊涂。通过翻阅资料,终于弄明白了,与大家分享一下。 工作线程与I/O线程 在ThreadPool中有这样一个方法: public static bool SetMaxTh 阅读全文
posted @ 2017-12-01 16:12 凌晨三点半 阅读(7269) 评论(5) 推荐(6) 编辑
摘要: 一、 排序场景 一维数组排序 多维数组排序 集合排序,例如Dictionary ,List<T>, 自定义类集合排序等 DataTable排序 二、 排序实现和测试 1. 一维数组排序 元素之间是一维线性的关系,每个元素只有一个下标,在排序场景下,每个元素的数据类型是一致的。例如: A:调用Arra 阅读全文
posted @ 2017-11-23 09:04 凌晨三点半 阅读(2401) 评论(2) 推荐(6) 编辑
摘要: 谈到缓存,我们自然而然就会想到缓存的好处,比如: 降低高并发数据读取的系统压力:静态数据访问、动态数据访问 存储预处理数据,提升系统响应速度和TPS 降低高并发数据写入的系统压力 提升系统可用性,后台宕机后,系统还存在可用的机会 缓存技术一直是优化程序性能的一个重要手段,在互联网技术体系中,也不例外 阅读全文
posted @ 2017-11-08 08:46 凌晨三点半 阅读(3408) 评论(2) 推荐(15) 编辑
摘要: 1.变量声明Scala 有两种变量, val 和 var val的值声明后不可变,var可变val msg: String = "Hello yet again, world!"或者类型推断val msg = "Hello, world!"2.函数定义如果函数仅由一个句子组成,你可以可选地不写大括号。def max2(x: Int, y: Int) = if (x > y) x else y3.... 阅读全文
posted @ 2017-09-28 15:24 凌晨三点半 阅读(2345) 评论(2) 推荐(0) 编辑