随笔分类 -  .Net Dev

摘要:最近在为公司的分布式服务框架做支持异步调用的开发,这种新特性的上线需要进行各种严格的测试。在并发性能测试时,性能一直非常差,而且非常的不稳定。经过不断的分析调优,发现Socket通信和多线程异步回调存在较为严重的性能问题。经过多方优化,性能终于达标。下面是原版本、支持异步最初版本和优化后版本的性能比 阅读全文
posted @ 2018-06-15 14:50 凌晨三点半 阅读(7164) 评论(1) 推荐(3) 编辑
摘要:在互联网应用中,流量洪峰是常有的事情。在应对流量洪峰时,通用的处理模式一般有排队、限流,这样可以非常直接有效的保护系统,防止系统被打爆。另外,通过限流技术手段,可以让整个系统的运行更加平稳。今天要与大家分享一下限流算法和C#版本的组件。 一、令牌桶算法: 令牌桶算法的基本过程如下: 工作过程包括3个 阅读全文
posted @ 2018-05-17 09:42 凌晨三点半 阅读(5976) 评论(16) 推荐(35) 编辑
摘要:线程池和Task是多线程编程中两个经常使用的技术,大家在熟悉不过了。他们有什么关联关系?Task又是怎么工作的呢?估计很多时候会犯糊涂。通过翻阅资料,终于弄明白了,与大家分享一下。 工作线程与I/O线程 在ThreadPool中有这样一个方法: public static bool SetMaxTh 阅读全文
posted @ 2017-12-01 16:12 凌晨三点半 阅读(7274) 评论(5) 推荐(6) 编辑
摘要:一、 排序场景 一维数组排序 多维数组排序 集合排序,例如Dictionary ,List<T>, 自定义类集合排序等 DataTable排序 二、 排序实现和测试 1. 一维数组排序 元素之间是一维线性的关系,每个元素只有一个下标,在排序场景下,每个元素的数据类型是一致的。例如: A:调用Arra 阅读全文
posted @ 2017-11-23 09:04 凌晨三点半 阅读(2414) 评论(2) 推荐(6) 编辑
摘要:谈到缓存,我们自然而然就会想到缓存的好处,比如: 降低高并发数据读取的系统压力:静态数据访问、动态数据访问 存储预处理数据,提升系统响应速度和TPS 降低高并发数据写入的系统压力 提升系统可用性,后台宕机后,系统还存在可用的机会 缓存技术一直是优化程序性能的一个重要手段,在互联网技术体系中,也不例外 阅读全文
posted @ 2017-11-08 08:46 凌晨三点半 阅读(3411) 评论(2) 推荐(15) 编辑
摘要:在学习.net core的过程中,我们已经明确被告知,Remoting将不会被支持。官方的解释是,.net framework 类型包含了太多的Runtime的内容,是一个非常重量级的服务实现,已被确定为一项有问题的体系结构。说白了就是迁移的难度很大,.net core中直接不提供了。微软的建议是, 阅读全文
posted @ 2017-08-28 08:58 凌晨三点半 阅读(8212) 评论(6) 推荐(2) 编辑
摘要:配置组件是.net framework中非常常用的功能。在创建.net framework 工程时,系统不仅会自动生成app.config文件,而且还提供了非常强大的访问类库。但是这些好东西,在.net core 2.0中已经不复存在,至少说没有.net framework 中那么完美了。 在升级. 阅读全文
posted @ 2017-08-23 08:46 凌晨三点半 阅读(10819) 评论(4) 推荐(9) 编辑
摘要:在迁移.net core的过程中,第一步就是要把.net framework 工程的目标框架改为.net core2.0,但是官网却没有提供转换工具,需要我们自己动手完成了。.net framework 工程迁移为.net core工程大体上有两种方案: 1.创建一个.net core的工程,然后把 阅读全文
posted @ 2017-08-22 08:43 凌晨三点半 阅读(16100) 评论(9) 推荐(8) 编辑
摘要:把现有的.net framework程序迁移到.net core上,是一个非常复杂的工作,特别是一些API在两个平台上还不能同时支持。两个类库的差异性,通过人工很难识别全。好在微软的工程师们考虑到了我们顾虑,为我们提前设计了一个工具:.NET Portability Analyzer。通过此工具我们 阅读全文
posted @ 2017-08-21 08:30 凌晨三点半 阅读(12431) 评论(3) 推荐(8) 编辑
摘要:官网已经有一个.net core的入手教程(https://www.microsoft.com/net/core#windowscmd),但这个教程完全没有顾及全宇宙第一IDE的感受。今天就跟大家体验一下在VS2017上开发.net core程序吧。VS2017开发环境的搭建请参考:http://w 阅读全文
posted @ 2017-08-18 08:47 凌晨三点半 阅读(11311) 评论(13) 推荐(20) 编辑
摘要:期待已久的.net core 2.0终于发布了!大家等的花儿都谢了。 不过比预期提前了一个多月,这在微软历史上还真的不多见。按照历史经验看,2.0版本应该比较靠谱,我猜这也是社区非常火爆的原因吧。下面就简单分享一下.net core2.0开发运行环境的搭建过程。.net core 理论知识在此就不赘 阅读全文
posted @ 2017-08-17 10:28 凌晨三点半 阅读(31773) 评论(0) 推荐(18) 编辑
摘要:1.任务并行库 从 .NET Framework 4 开始,TPL 是编写多线程代码和并行代码的首选方法。 但是,并不是所有代码都适合并行化;例如,如果某个循环在每次迭代时只执行少量工作,或它在很多次迭代时都不运行,那么并行化的开销可能导致代码运行更慢。 此外,像任何多线程代码一样,并行化会增加程序 阅读全文
posted @ 2017-06-22 09:23 凌晨三点半 阅读(1151) 评论(1) 推荐(1) 编辑
摘要:Tuple是具有指定数量和顺序的值的一种数据结构。针对这种数据结构,.Net4.0中提供了一组Tuple类型,具体如下: Tuple Tuple<T> Tuple<T1, T2> Tuple<T1, T2, T3> Tuple<T1, T2, T3, T4> Tuple<T1, T2, T3, T4 阅读全文
posted @ 2017-06-22 09:19 凌晨三点半 阅读(925) 评论(0) 推荐(0) 编辑
摘要:1.内存基础知识 每个进程都有其自己单独的虚拟地址空间。 同一台计算机上的所有进程共享相同的物理内存,如果有页文件,则也共享页文件。 默认情况下,32 位计算机上的每个进程都具有 2 GB 的用户模式虚拟地址空间。 作为一名应用程序开发人员,您只能使用虚拟地址空间,请勿直接操控物理内存。 垃圾回收器 阅读全文
posted @ 2017-06-21 08:56 凌晨三点半 阅读(959) 评论(1) 推荐(1) 编辑
摘要:1.在方法定义的时候为参数指定一个默认值。调用方法的时候既可以像平时那样传入参数,也可以直接跳过不传入,这样的话,就使用默认值传到方法里。例如: 2.在之前版本的C#中,方法定义的参数顺序必须与方法调用时的参数顺序一致,即方法Method(int i, string s)调用时就必须第一个传入int 阅读全文
posted @ 2017-06-21 08:51 凌晨三点半 阅读(1075) 评论(0) 推荐(1) 编辑
摘要:在新版本的C#中,dynamic关键词是一个很重要的新特性,现在你可以创建动态对象并在运行时再决定它的类型。而且.net 4.0为CLR加入了一组为动态语言服务的运行时环境,称为DLR(Dynamic Language Runtime动态语言运行时),这使得: C#这种静态类型语言可以在 .NET 阅读全文
posted @ 2017-06-21 08:48 凌晨三点半 阅读(923) 评论(0) 推荐(1) 编辑
摘要:从Redis 2.8.0版本起,Redis加入了“Keyspace notifications”(即“键空间通知”)的功能。键空间通知,允许Redis客户端从“发布/订阅”通道中建立订阅关系,以便客户端能够在Redis中的数据因某种方式受到影响时收到相应事件。 可能接收到的事件举例如下: 影响一个给 阅读全文
posted @ 2017-05-10 16:54 凌晨三点半 阅读(7877) 评论(0) 推荐(0) 编辑
摘要:方案一: 如果是WebAPI,可以加入全局设置: GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver( 阅读全文
posted @ 2017-04-20 13:36 凌晨三点半 阅读(3936) 评论(0) 推荐(1) 编辑
摘要:泛型 部分类型 匿名方法 迭代器 可空类型 Getter / setter单独可访问性 方法组转换(代表) Co- and Contra-variance for delegates 静态类 Delegate inference 泛型 部分类型 匿名方法 迭代器 可空类型 Getter / sett 阅读全文
posted @ 2017-04-14 09:22 凌晨三点半 阅读(1553) 评论(0) 推荐(0) 编辑
摘要:很多情况下,我们通过开发的winform程序会crash掉,此问题大部分是因为有部分异常没有捕获处理导致的。我们可以通过注册下面两个异常处理,来捕获这些异常,并做特殊处理。 Application.ThreadException += Application_ThreadException;AppD 阅读全文
posted @ 2017-04-07 15:29 凌晨三点半 阅读(1049) 评论(0) 推荐(0) 编辑

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