1

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

我不想用接口实现使我的项目混乱,所以我正在考虑使用由一些 3rd 方库(如 LinFu、Castle、Unity 等)创建的动态代理。它们是为每个接口生成一个实例,还是每次调用都得到一个实例。

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

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

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

所有接口仅声明 EF4.1 POCO 的一部分。所以只是吸气剂和二传手。

4

2 回答 2

1

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

因此,围绕给定实现创建接口代理(无论您如何设置,ExpandoObject 都算作一种类型)将产生一次生成代理类型的成本,即每次创建代理时的 Activator.CreateInstance(即'不错)并且对于每个调用都会有一个静态调用,这是你没有代理的情况+一个 dlr 动态调用,这要归功于 microsoft。

于 2011-06-29T14:33:24.380 回答
0

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

于 2011-04-27T11:16:29.170 回答