我正在考虑将逻辑添加到我正在处理的库中,这将需要一个动态代理。我想从在生产环境中使用这两个库的用户那里得到一些建议。如果有什么缺点,让你不得不换另一个,等等。基本上告诉我你在图书馆的经历。答案将帮助我决定使用哪一个。
-编辑--
我忘记提到,我正在开发的库将支持Mono,因此,您可以共享有关这两个库的任何知识,以及它们对Mono的支持也将是很棒的。
发布于 2009-09-10 19:22:42
我是城堡的提交者,为动态代理做出了贡献,所以我可能有偏见,但我通常认为是一个更好的解决方案。我在这里讨论的是LinFu DynamicProxy v1.0,因为这是我所熟悉的。LinFu.Proxy 2基于Mono.Cecil并从头开始重写。
invocation.Proceed();
对于LinFu,它看起来如下(当我从内存中编写它时,实际的方法/属性名称可能会有所不同)。
//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版本,但我不确定它是仅主干,还是发布。我不知道春天或者统一。
发布于 2009-09-10 18:09:32
临夫是一个比城堡代理生成器更轻量级的代理生成器。
在决定使用哪种方法时,老实说,这并没有多大区别。
根据作者的说法,Linfu的性能将大大优于城堡生成器,但在我自己观察到的实际使用情况中,速度的差异是很小的。
话虽如此,临福的表现将超过城堡,而且我不知道城堡有什么东西,所以我总是使用临福。
发布于 2009-11-17 21:36:36
我们在2.0.1中有一些与LinFu与城堡相关的perf问题。http://niemware.blogspot.com/2009/11/nhibernate-21-performance-issues-with.html
https://stackoverflow.com/questions/1406762
复制相似问题