.net动态代理的成本

时间:2011-04-27 08:48:03

标签: c# .net castle-dynamicproxy dynamic-proxy linfu

使用动态代理的成本是多少?

我不想使用Interface Implementations混乱我的项目,因此我正在考虑使用由LinFu,Castle,Unity等第三方库创建的动态代理。他们是否为每个接口生成一个实例,或者我为每个接口生成一个实例调用

这是一个网络应用程序,从长远来看,性能问题是什么。

我也在使用EF 4.1(目前是CTP5),所以如果自己创建代理类,这让我想知道我是否可以使用EF自己的动态代理创建工具。

P.S。是的,我的接口是由具体类以及其他接口和基类实现的,但有时我只需要它的接口部分而不是具体类附带的额外内容。

所有接口都只声明EF4.1 POCO的某些部分。所以只是吸气者和制定者。

2 个答案:

答案 0 :(得分:1)

开源Impromptu-Interface需要c#4.0,并为您使用的每个接口和实现类型组合创建一个轻量级代理类型,并使它们保持高速缓存。

因此,围绕给定的实现创建一个接口代理(无论你如何设置,ExpandoObject都算作一种类型)将产生一次性生成代理类型的成本,每次进行代理时都会产生Activator.CreateInstance (这还不错)并且对于每次调用都会有一个静态调用,这是你在代理中所拥有的一个动态调用,并且由于微软而非常优化。

答案 1 :(得分:0)

看起来您需要更多的存根而不是动态代理。也许你可能想看看Moq。据我所知,每次创建模拟时它都会创建一个不同的实例,但不知道内部是否保留了某种类型的缓存。请注意,因为它是一个针对单元测试的库,所以这种使用可能是非正统的。