31

私が取り組んでいるライブラリに、動的プロキシが必要になるロジックを追加しようとしています。これら 2 つのライブラリを実稼働環境で使用しているユーザーからアドバイスをもらいたいと思います。一方が他方よりも優れているか、他のものに切り替えなければならない欠点があったかなど。基本的に、ライブラリの経験を教えてください。答えは、どちらを使用するかを決定するのに役立ちます。

- 編集 -


私が開発しているライブラリは Mono をサポートすることを忘れていました。したがって、2 つのライブラリとそれらの Mono のサポートについて共有できる知識があれば、それも素晴らしいことです。

4

3 に答える 3

20

私は Castle のコミッターであり、Dynamic Proxy に貢献しているため、偏見があるかもしれませんが、一般的には Castle の Dynamic Proxy の方がはるかに優れたソリューションだと思います。ここで LinFu DynamicProxy v1.0 について話しているのは、それについてよく知っているからです。LinFu.Proxy 2 は Mono.Cecil に基づいており、ゼロから書き直されています。

  • Castle はより幅広いシナリオをカバーします。
  • Castle のユーザー ベースは (はるかに) 大きく、多くの OSS および商用アプリケーションで実績があります。
  • キャッスルは実際に優れたパフォーマンスを発揮します (リンク)
  • 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 の問題ではありませんが、Microsoft の BCL の実装のバグの結果です (Mono ではそのような問題はありません)。これは、単一の ModuleScope に多くの (200 以上の) プロキシ タイプがある場合にのみ現れます。

解決策は簡単です - それほど多くのプロキシ タイプを生成しないか (通常は必要ありません)、多くの ModuleScopes/ProxyGenerators を使用します (たとえば、Rhino.Mocks はこのアプローチを使用します)。

個人的には Mono で開発していないので直接の経験はありませんが、Mono で Castle DP を使用しているライブラリがあり、何のコンプライアも得られなかったので、問題なく動作すると思います。

数か月前の私のベンチマーク以来、Castle DP の新しいリリースはありません (新しいバージョンは年末に予定されています)。LiFu には 2.0 バージョンがありますが、トランクのみなのかリリース済みなのかはわかりません。Spring や Unity についてはわかりません。

于 2009-09-10T19:22:42.663 に答える
4

2.0.1のLinFuvsCastleに関連するパフォーマンスの問題がいくつかありました。 http://niemware.blogspot.com/2009/11/nhibernate-21-performance-issues-with.html

于 2009-11-17T21:36:36.230 に答える