Каковы различия между LinFu.DynamicProxy и Castle.DynamicProxy?

Это дерево, поэтому рекурсия - ваш друг: начните с родительского каталога и вызовите метод, чтобы получить массив дочерних файлов. Итерация через дочерний массив. Если текущее значение является каталогом, передайте его рекурсивному вызову вашего метода. Если нет, обработайте файл листа соответствующим образом.

30
задан Dale Ragan 10 September 2009 в 23:40
поделиться

3 ответа

Я являюсь коммиттером Castle, участвующим в Dynamic Proxy, поэтому я могу быть предвзятым, но в целом я считаю, что Dynamic Proxy Castle - гораздо лучшее решение. Я говорю здесь о LinFu DynamicProxy v1.0, потому что это то, с чем я знаком. LinFu.Proxy 2 основан на Mono.Cecil и переписан с нуля.

  • Castle охватывает более широкий диапазон сценариев.
  • Castle имеет (намного) большую базу пользователей и доказал свою эффективность во многих OSS и коммерческих приложениях
  • Castle работает лучше ( ссылка )
  • Castle имеет более чистый и простой в использовании API например, вызов целевого метода для Castle DynamicProxy выглядит так:

invocation.Proceed ();

для LinFu это выглядит так (фактическое имя метода / свойства может отличаться, поскольку я пишу его из памяти)

//invocation.TargetMethod is MethodInfo, so you're using reflection
invocation.TargetMethod.Invoke(invocation.Target,invocation.Parameters);
  • Castle имеет активную группу пользователей, где вы можете быстро получить ответы на свои вопросы.

Проблема производительности, упомянутая в другом ответе, не является проблемой DynamicProxy, а является результатом ошибки в реализации BCL от Microsoft (в Mono нет такой вопрос, кстати). Это проявляется только тогда, когда у вас есть много (более 200+) типов прокси в одном ModuleScope.

Решение тривиальное - не генерируйте такое количество типов прокси (обычно вам не придется) или используйте много ModuleScopes / ProxyGenerators ( например, Rhino.Mocks использует этот подход)

Лично я не занимаюсь разработкой на Mono, поэтому у меня нет личного опыта, однако есть библиотеки, использующие Castle DP на Mono, и мы не получили никаких жалоб, так что я думаю он работает отлично.

С момента моего тестирования несколько месяцев назад не было новой версии Castle DP (новая версия нацелена на конец года). У LiFu есть версия 2.0, но я не уверен, что она только транковая или выпущена. Я не знаю о Spring или Unity.

20
ответ дан 28 November 2019 в 00:18
поделиться

Linfu является более легким генератором прокси, чем генератор прокси Castle.

Если честно, при принятии решения, какой использовать, особой разницы нет.

Согласно автору Linfu значительно превосходит генератор Castle, но в моих собственных наблюдениях за использованием в реальном мире разница в скорости незначительна.

Сказав, что Linfu превзойдет Castle, я не знаю ничего, что было бы у Castle. его, поэтому я всегда использую Linfu.

10
ответ дан 28 November 2019 в 00:18
поделиться

У нас были проблемы с производительностью, связанные с LinFu vs Castle в 2.0.1. http://niemware.blogspot.com/2009/11/nhibernate-21-performance-issues-with.html

4
ответ дан 28 November 2019 в 00:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: