代码改变世界

随笔档案-2013年12月

读FCL源码系列之List<T>---让你知其所以然---内含疑问求大神指点

2013-12-29 16:38 by stevey, 463 阅读, 收藏,
摘要: 序言 在.NET开发中,List是我们经常用到的类型。前段时间看到其他部门小伙伴讨论“两个List(10W个元素)集合求并集,list1.Where(p=>list2.Contains(p)).ToList()”,性能很差,有人说是ToList的问题,我当时第一直觉是关键在Contains方法,这个问题后面在来细说讨论。还有某大神说过,没反编译过框架源码的码农不是合格码农:)。下面我们就借助Reflector来读一读.NET4.0中List的源码,在读到一些方法实现时候,会更清楚,oh,原来是这样,解开以前的疑惑,写更有效率的代码。List的数据成员private const int _ 阅读全文

性能优化-列表类型转换(ConvertList<TSource, TResult>)

2013-12-16 16:55 by stevey, 1911 阅读, 收藏,
摘要: 之前,在项目中看到过一段通用列表类型转换的代码,直接的实现便是用反射。大概看了下,它用在领域模型转DTO和SOA接口中契约实体的转换等等。首先,它使用了反射,其次,还是在循环中使用,便有了优化的想法。方法原型如:public static List ConvertList(List source) where TResult : new(),下面贴出代码。说明一下,在此我没有任何的贬义,这段代码可能比较老,其次在项目中,首先是实现功能,如果当时没有更好的实现,就先实现功能,后面有时间可以在优化,毕竟项目有时间节点,个人自己平衡哈。public class ObjectConvertHelp.. 阅读全文

学习Visitor Pattern 有感而发!override and overload

2013-12-07 16:09 by stevey, 290 阅读, 收藏,
摘要: 通过阅读各位前辈写的博文,像吕震宇,idior,李建忠WebCast等,对Visitor模式有一定的了解,有感而记录下来,以备忘。 Visitor Pattern 假设了这样一个场景,在一个类型层次中,如果类型的个数稳定,且对类型操作不稳定(根据需求可能会变化)。在该模式中有个Double Dispatch的概念,即Element抽象一次,Visitor抽象一次多态。还有一次编译时多态(overload)。在Element中有Accept方法,留出以后可能扩展的操作,在ConcreteElement中,有如下关键点public override void Accept(Visitor v... 阅读全文