随笔分类 -  clr

深入学习研究语言特性
关于GC和析构函数的一个趣题
摘要:这个有趣的问题感谢装配脑袋友情提供。请看如下代码: public class Dummy { public static Dummy Instance; public int X = 1; ~Dummy() { ... 阅读全文
posted @ 2014-12-28 23:45 JeffWong 阅读(2923) 评论(1) 推荐(10) 编辑
垃圾回收机制GC知识再总结兼谈如何用好GC
摘要:一、为什么需要GC应用程序对资源操作,通常简单分为以下几个步骤:1、为对应的资源分配内存2、初始化内存3、使用资源4、清理资源5、释放内存应用程序对资源(内存使用)管理的方式,常见的一般有如下几种:1、手动管理:C,C++2、计数管理:COM3、自动管理:.NET,Java,PHP,GO…但是,手动... 阅读全文
posted @ 2014-12-22 20:58 JeffWong 阅读(57177) 评论(10) 推荐(17) 编辑
记录个人一直以来对枚举定义和使用的两个误解
摘要:1、枚举定义声明基础类型的限制想要定义一个表示数据库主键编号范围的枚举: /// /// 编号范围枚举 /// public enum IDRangeType : Int64 { /// /// 1到2的32次方 /// ... 阅读全文
posted @ 2014-06-25 20:39 JeffWong 阅读(2586) 评论(7) 推荐(2) 编辑
泛型实现中没有正确lock引用类型的一个隐藏bug分析
摘要:最近看到这篇文章dotNetDR_的回复,让我想起一个真实发生的案例,下面就简单说说这个关于lock引用类型的一个不容易发现的隐藏缺陷。某类库中的代码,封装了很简单的一个通用类,用于线程安全地执行某一种类型的特定方法,几行代码搞定: public class ConcurrentObjectE... 阅读全文
posted @ 2014-05-22 21:56 JeffWong 阅读(1754) 评论(3) 推荐(3) 编辑
JITCompiler、NGen.exe及.NET Native
摘要:一、JITCompiler如你所知,JIT(just-in-time或“即时”)编译器是CLR的重要组件,它的职责是将IL转换成本地cpu指令。>一书中在CLR的执行模型章节里有一副图形象介绍了一个方法(WriteLine)首次调用时发生的事情:JITCompiler函数被调用时,它知道要调用的是哪... 阅读全文
posted @ 2014-04-04 22:03 JeffWong 阅读(3158) 评论(2) 推荐(5) 编辑
为什么不能把委托(delegate)放在一个接口(interface)当中?
摘要:stackoverflow上有人问,为什么不能把委托放在一个接口当中?投票最多的第一个答案第一句话说,“A Delegate is just another type, so you don't gain anything by putting it inside the interface.”翻译过来大致意思就是:委托只是一种类型,把委托放在接口中你什么也得不到。看上去挺拗口的,如果你也感觉这句话说的不知所云,那么只能求助于MSDN的接口和委托的定义。接口:只包含方法、属性、事件或索引器的签名。 实现接口的类或结构必须实现接口定义中指定的接口成员。委托:是一种定义方法签名的类型。 当 阅读全文
posted @ 2013-07-07 19:02 JeffWong 阅读(3272) 评论(0) 推荐(0) 编辑
有效预防.NET应用程序OOM的经验备忘
摘要:根据个人的开发和系统调优经验,大部分的内存溢出(及内存泄漏)都和不好的开发习惯有直接关系,有几个开发经验可以有效预防OOM,总结下贴出来和大家分享。一、批量和分页老生常谈的话题,简单,但是非常实用。每个合格的coder对数据的处理,必须要有分页或批量多次的意识。大数据量的读取或查询结果集是内存占用大... 阅读全文
posted @ 2013-02-04 19:59 JeffWong 阅读(9436) 评论(34) 推荐(33) 编辑
浅析线程安全容器的实现
摘要:最近写了个小程序用到了C#4.0中的线程安全集合。想起很久以前用C#2.0开发的时候写后台windows服务,为了利用多线程实现生产者和消费者模型,经常要封装一些线程安全的容器,比如泛型队列和字典等等。下面就结合部分MS的源码和自己的开发经验浅显地分析一下如何实现线程安全容器以及实现线程安全容器容易 阅读全文
posted @ 2012-09-09 20:22 JeffWong 阅读(7878) 评论(4) 推荐(7) 编辑
认识k_BackingField
摘要:事情从Json的序列化和反序列化说起。在C#2.0的项目中,以前经常使用Json.Net实现序列化和反序列化。后来从c#3.0中开始使用新增的DataContractJsonSerializer进行json相关的操作。微软提供的原生类库使用上并不复杂,参考一下msdn你很容易就会写出序列化和反序列化的方法,比如经常被人使用的泛型方法如下:JsonHelper /// <summary> /// 对象转换成json /// </summary> /// <typeparam name="T"></typeparam> /// . 阅读全文
posted @ 2012-05-31 22:58 JeffWong 阅读(7374) 评论(5) 推荐(4) 编辑
浅谈c#泛型类型变量作为操作数使用的通用解决方法
摘要:问题来源:在c#编程中,经常会对一些数字型基元类型如Int16,Int32,Int64,Decimal等,做一些加减乘除的事情。比如我们经常写出下面的方法,用来计算从0开始到输入的32位整数之间数字的总和(没有考虑溢出等特殊情况): internal static Int32 Sum(int nu... 阅读全文
posted @ 2010-11-08 20:37 JeffWong 阅读(9785) 评论(4) 推荐(1) 编辑
c#的const和readonly使用小结
摘要:前言:从上周开始看<<CLR via C#>>第三版,刚刚看完了第四和第七两章,这两章都算常识,但是有很多基础知识和术语理解不是很深入,所以看得有点慢,计划每两周写点心得,是以成文。1、应用场景重现一个简单的应用程序解决方案,如下:其中,类库CSharpLib里定义一个简单的类SomeType如下:在控制台应用程序ConsoleApp中,引用类库CSharpLib,然后写下... 阅读全文
posted @ 2010-11-01 22:34 JeffWong 阅读(3185) 评论(0) 推荐(1) 编辑
浅谈c#中使用lock的是与非
摘要:1、从“最简单”的单例模式说起:[代码]  稍微了解设计模式基础知识的人对上面的代码应该不会陌生。上次去面试,主考官就让楼猪写个单例。虽然平时已经很久没有刻意去使用设计模式编程了,但是对于这个单例模式,咩哈哈,虽然大丈夫喜怒不形于色,但是nc楼猪当时那个意气风发踌躇满志运笔如飞锋芒毕露啊,嘿嘿,中规中矩地交了如上答案。面试官看了一下肯定了两句,话锋一转,问lock那里的ob... 阅读全文
posted @ 2010-09-17 23:56 JeffWong 阅读(19757) 评论(25) 推荐(13) 编辑
无心插柳,再次浅谈.net资源的回收
摘要:楼猪的上一篇“实现IDisposable接口,手动完成资源回收”本是无心之作,自己的本意是实现类似于微软.net里的某些类,外部调用的时候using一下完事。看了园子里几位高手的留言,楼猪在这里统一感谢他们的不吝赐教。下面楼猪就简单总结并回答一下他们的观点:1、资源回收代价大,代码中慎用GC回收楼猪:完全赞同。一直以来楼猪肤浅的认识就是,.net是自动回收机制,早晚它都会调... 阅读全文
posted @ 2010-04-25 16:33 JeffWong 阅读(2127) 评论(4) 推荐(0) 编辑
实现IDisposable接口,手动完成资源回收
摘要:之前nc楼猪一直想当然地认为一个对象实现了IDisposable接口,执行GC.Collect方法后,GC会帮助我们自动实现对所有资源的回收。比如下面的一段代码:1、一个继承自IDisposable接口的类代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/... 阅读全文
posted @ 2010-04-24 22:02 JeffWong 阅读(2981) 评论(9) 推荐(1) 编辑
无废话即兴编程一篇
摘要:实现“去掉字符串里的特定字符,并返回不包含该特定字符的一个新字符串”。Code is cheap,代码如下:代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--classProgram{staticvoidMain(strin... 阅读全文
posted @ 2010-03-16 22:45 JeffWong 阅读(631) 评论(4) 推荐(0) 编辑
帅呆了,自己动手解除一个对DataReader对象的疑惑
摘要:和某个新认识的有多年开发经验的高手聊天,他出了个题考楼猪。问题说起来其实灰常常见和简单,用代码描述就是这样的:[代码]}  虽然楼猪这段掐头去尾的代码看上去很是恶心,但是对于很多初学.net的童鞋而言,刚开始照着教科书也没有少写这种代码吧?您看懂楼猪要表达的意思了吗?还是由楼猪先对上面的代码稍做解释:cmd是SqlCommnd对象的一个实例,现在通过一板一眼地写ado.net几个常用对象的的方式从... 阅读全文
posted @ 2010-03-13 10:13 JeffWong 阅读(1064) 评论(7) 推荐(0) 编辑
在foreach的判断条件里执行方法会有效率问题吗?
摘要:楼猪平时一有空就有看别人代码的习惯,从许多优秀规范的代码中学习到了很多简约高效的写法和画龙点睛的思想精华。但是有的时候也会觉得某些写法很值得玩味。比如刚看到一段代码,在foreach的条件判断里加了一个方法。楼猪一开始想当然地认为循环几次,方法也会执行几次,这样肯定会有效率问题。但是看来看去还是不确定写代码的人为什么要这么写,难道当时他不小心没有注意到这个问题,抑或他rp正处低谷,抑或是他一时不负... 阅读全文
posted @ 2010-02-02 22:03 JeffWong 阅读(2077) 评论(2) 推荐(0) 编辑