Hello World
Spiga

标签:Emit

NHibernate自定义集合类型(中):通用实现方式

2009-10-11 11:27 by 老赵, 16520 visits
摘要:上一片文章中我们观察了在代码中自定义一个基于Set的集合类型该怎么做,以及简单了解了一下NHibernate的这些自定义支持大致是如何工作的。不过文章最后还是留了两个问题,一是认为这种扩展方式不够通用,二是其中会出现的“重复”或是“反向依赖”。现在我们就需要在上文的基础上进行总结,提出一个通用的实现,可以方便我们构建自定义的集合类型。 阅读全文

较为理想的延迟代理的编写方式

2009-09-07 11:15 by 老赵, 7377 visits
摘要:之前我谈到,在普通情况下我们可以很轻松地写出过一个代理类,用来处理延迟加载的情况。当时给出了一个很简单的做法,也就是指创建基类,覆盖它的一些属性实现。不过我当时也提到,这么做可能够用,但是也有一些缺点。例如,它破坏了SomeID属性中包含的业务逻辑。这也是我认为NHibernate的延迟加载方法欠妥的原因。因此我又想了想,理想中的延迟加载方式应该是什么样的呢? 阅读全文

如果是能简单解决的问题,就不用想得太复杂了

2009-09-05 17:41 by 老赵, 7002 visits
摘要:有个朋友在MSN问我说,有没有关于Emit的资料,它想生成一个类的动态代理。他抱怨Emit还是很麻烦,不过交谈过后知道他是想要做什么。他希望为一个对象的某个属性作延迟加载,这样可以避免一些无谓的消耗。不过我提出,这个方法是不是太重了,因为动态代理不是那么孤立存在的,它往往需要考虑很多其他东西。有时候我们可以使用最简单的代码,在一定程度上也可以达到目的。 阅读全文

方法的直接调用,反射调用与……Lambda表达式调用

2008-11-24 09:59 by 老赵, 35277 visits
摘要:想调用一个方法很容易,直接代码调用就行,这人人都会。其次呢,还可以使用反射。不过通过反射调用的性能会远远低于直接调用——至少从绝对时间上来看的确是这样。因此,很多框架在必须利用到反射的场景中,都会设法使用一些较高级的替代方案来改善性能。例如,使用CodeDom生成代码并动态编译,或者使用Emit来直接编写IL。不过自从.NET 3.5发布了Expression相关的新特性,我们在以上的情况下又有了更方便并直观的解决方案。 阅读全文
1
使用Live Messenger联系我