2013年12月31日

字里行间有学问——从一个方法的吐槽开始,说说几个编码实践

摘要: 这两天小小的维护了下一个历史遗留的基于.net 1.1开发的后台程序,加几行代码上去,这场景需要将一个ArrayList类型的返回值转换为string[]传给另一个方法,听“老人”说,已经写了个方法来干这事,OK,那就用之:ArrayList list = GetList(); // 返回ArrayList的方法,原名不是这个int count = list.Count; // 下文还做它用,用变量存储// ** 就加了这么两行代码 **string[] array = StringHelper.List2Array(list);ProcessArray(array); // 接收string 阅读全文

posted @ 2013-12-31 22:59 codeyeast 阅读(211) 评论(0) 推荐(0) 编辑

2013年11月20日

[C#]匿名类型的深拷贝

摘要: .net Framework 3.5 + C# 3 发布了包括LinQ等一系列功能,其中包括了匿名类型,而我们在升级到.net4后,发现原来写好的用于POCO的深拷贝方法 static object Clone(object obj) 在匿名对象上不管用了。原因与切入点目前使用的深拷贝实现方式包括:在类型内部编码实现,比如实现ICloneable接口。通过序列化、反序列化方式复制对象。使用反射遍历被拷贝对象的属性,取值并赋值给新的实例。上述方式均不可用,考察原因,我们使用.net Reflector反编译匿名类型 new { Foo = 123, Bar = 456 },可见其代码结构如下:注 阅读全文

posted @ 2013-11-20 20:44 codeyeast 阅读(1995) 评论(0) 推荐(0) 编辑

2012年11月17日

减小锁定的粒度:C#实现基于关键字(key)的锁定

摘要: 问题描述最近需要实现一个API,方法签名(的抽象版本)类似于void Update(string id)API将在多线程环境下被调用,需满足:如果多个调用线程传入相同的id,则它们必须被串行化——一个线程工作,其他线程阻塞,前一个线程调用完毕后,后一个线程才开始工作,依此类推。若传入的id不同,则各线程可并行执行。场景与数据库的行锁定非常相似——锁定对于更新相同的行的多个请求是互斥的,而更新不同的行则可同时进行。不过这回我们没有数据库的帮忙,同时,程序非常的小(其实是客户端程序),所以我们希望解决方案也非常小巧。基本思路说道多线程串行化,立刻想到的就是锁,但是如果简单的 lock (someG 阅读全文

posted @ 2012-11-17 20:10 codeyeast 阅读(2721) 评论(9) 推荐(3) 编辑

导航