首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LinFu.DynamicProxy和Castle.DynamicProxy有什么区别?

LinFu.DynamicProxy和Castle.DynamicProxy有什么区别?
EN

Stack Overflow用户
提问于 2009-09-10 17:55:12
回答 3查看 9.4K关注 0票数 31

我正在考虑将逻辑添加到我正在处理的库中,这将需要一个动态代理。我想从在生产环境中使用这两个库的用户那里得到一些建议。如果有什么缺点,让你不得不换另一个,等等。基本上告诉我你在图书馆的经历。答案将帮助我决定使用哪一个。

-编辑--

我忘记提到,我正在开发的库将支持Mono,因此,您可以共享有关这两个库的任何知识,以及它们对Mono的支持也将是很棒的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-10 19:22:42

我是城堡的提交者,为动态代理做出了贡献,所以我可能有偏见,但我通常认为是一个更好的解决方案。我在这里讨论的是LinFu DynamicProxy v1.0,因为这是我所熟悉的。LinFu.Proxy 2基于Mono.Cecil并从头开始重写。

  • 城堡涵盖了更广泛的场景。
  • 卡塞尔拥有(很多)更大的用户群,并在许多开放源码软件和商业应用程序中得到了证明。
  • 卡塞尔实际上表现得更好(链接)
  • 城堡具有更干净、更易于使用的API (例如,调用目标方法到DynamicProxy ),如下所示:

invocation.Proceed();

对于LinFu,它看起来如下(当我从内存中编写它时,实际的方法/属性名称可能会有所不同)。

代码语言:javascript
复制
//invocation.TargetMethod is MethodInfo, so you're using reflection
invocation.TargetMethod.Invoke(invocation.Target,invocation.Parameters);
  • 城堡有一个活跃的用户组,您可以在该用户组中快速获得问题的答案。

另一个答案提到的性能问题不是DynamicProxy问题,而是微软实现BCL (on上没有这样的问题BTW)中的错误造成的。这仅在单个200+中有许多代理类型(通过ModuleScope )时才会显示出来。

解决方案很简单--不要生成那么多代理类型(通常不需要)或使用许多ModuleScopes/ProxyGenerator(例如,Rhino.Mocks使用这种方法)

就我个人而言,我没有在Mono上开发,所以我没有第一手的经验,但是有一些库使用Mono上的Castle,而且我们没有得到任何遵从性,所以我想它工作得很好。

自从几个月前我的基准,还没有新的版本的城堡DP (新版本的目标是在今年年底)。LiFu有一个2.0版本,但我不确定它是仅主干,还是发布。我不知道春天或者统一。

票数 20
EN

Stack Overflow用户

发布于 2009-09-10 18:09:32

临夫是一个比城堡代理生成器更轻量级的代理生成器。

在决定使用哪种方法时,老实说,这并没有多大区别。

根据作者的说法,Linfu的性能将大大优于城堡生成器,但在我自己观察到的实际使用情况中,速度的差异是很小的。

话虽如此,临福的表现将超过城堡,而且我不知道城堡有什么东西,所以我总是使用临福。

票数 10
EN

Stack Overflow用户

发布于 2009-11-17 21:36:36

我们在2.0.1中有一些与LinFu与城堡相关的perf问题。http://niemware.blogspot.com/2009/11/nhibernate-21-performance-issues-with.html

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1406762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档