随笔分类 -  .net基础

温故而知新
[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 阅读(2073) 评论(0) 推荐(0)

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

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

导航