什么是LinFu.DynamicProxy和Castle.DynamicProxy之间的区别是什么?

2019-07-17 15:43发布

我期待在增加逻辑来我就这一工作将需要一个动态代理需要的库。 我想获得来自用户的一些建议已经谁在生产环境中使用这两个库的。 难道一出来执行其他的,都没有任何缺点的这使你有切换到其他等,基本上告诉我与图书馆的经验。 这些问题的答案将帮助我决定使用哪一个。

- 编辑 -


我忘了提,我发展将支持单声道库,因此任何知识,你可以分享两个库及其对单的支持将是巨大的也是。

Answer 1:

我的提交城堡,有助于动态代理,所以我可能会有所偏差,但我普遍认为城堡的动态代理是好得多的解决方案。 我在这里谈论李林甫DynamicProxy V1.0,因为这是我所熟悉的。 LinFu.Proxy 2是基于Mono.Cecil能,并从从头开始重写。

  • 城堡涵盖更广范围的场景。
  • 城堡有(很多)更大的用户群,而且在许多开放源码软件和商业应用证明
  • 城堡实际执行好( 链接 )
  • 城堡具有更清洁,更易于使用的API,例如调用目标方法城堡DynamicProxy看起来是这样的:

invocation.Proceed();

对于李林甫,它看起来像这样(实际方法/因为我从记忆写它的属性名称可能有所不同)

//invocation.TargetMethod is MethodInfo, so you're using reflection
invocation.TargetMethod.Invoke(invocation.Target,invocation.Parameters);
  • 城堡有一个活跃的用户群,你可以快速获得问题的答案。

性能问题,通过对方的回答中提到不DynamicProxy问题,但在微软的落实BCL的错误的结果(Mono上不存在这样的问题BTW)。 当你有一个ModuleScope很多(超过200 +)代理类型这只表现。

解决办法是微不足道的 - 不会产生很多的代理类型(通常你不会有),或使用许多ModuleScopes / ProxyGenerators(例如Rhino.Mocks使用此方法)

我个人不Mono上发展,所以我没有亲身经历,但有单声道使用城堡DP库,所以我想它工作得很好,我们没有得到任何compliaints。

由于我的基准几个月前,一直没有城堡DP的新版本(新版本在今年年底的目标)。 陈立夫有一个2.0的版本,但我不知道这是否是唯一的主干,或释放。 我不知道春天或统一。



Answer 2:

李林甫比城堡代理生成一个更轻量级的代理生成。

决定哪些使用,说实话当它没有太大的差别。

据笔者,李林甫将大大优于城堡发电机,但在我自己的现实世界中使用的意见在速度上的差异是微不足道的。

话虽如此李林甫将超越城堡,我不知道任何事情城堡拥有它,所以我总是用李林甫。



Answer 3:

我们在2.0.1与李林甫VS城堡一些PERF的问题。 http://niemware.blogspot.com/2009/11/nhibernate-21-performance-issues-with.html



文章来源: What are the differences between LinFu.DynamicProxy and Castle.DynamicProxy?