Vraag Wat zijn de verschillen tussen LinFu.DynamicProxy en Castle.DynamicProxy?


Ik kijk naar het toevoegen van logica aan een bibliotheek waar ik aan werk, waarvoor een Dynamic Proxy nodig is. Ik zou graag advies willen van gebruikers die deze twee bibliotheken in een productieomgeving hebben gebruikt. Voer je de ander uit, waren er tekortkomingen waardoor je naar de ander moest overschakelen, etc. Vertel me in principe wat je ervaringen waren met de bibliotheek. De antwoorden helpen me beslissen welke ik moet gebruiken.

-- Bewerk --


Ik vergat te vermelden dat de bibliotheek die ik aan het ontwikkelen ben, Mono zal ondersteunen, daarom kan elke kennis die je over de twee bibliotheken kunt delen en hun ondersteuning voor Mono ook geweldig zijn.


30
2017-09-10 17:55


oorsprong


antwoorden:


Ik ben een committer aan Castle en draag bij aan Dynamic Proxy, dus ik ben misschien bevooroordeeld, maar ik denk dat Castle's Dynamic-proxy over het algemeen een veel betere oplossing is. Ik heb het hier over LinFu DynamicProxy v1.0 omdat dat is waar ik bekend mee ben. LinFu.Proxy 2 is gebaseerd op Mono.Cecil en is van de grond af opnieuw geschreven.

  • Kasteel beslaat een breder scala aan scenario's.
  • Castle heeft (veel) een groter gebruikersbestand en is bewezen in veel OSS- en commerciële applicaties
  • Castle presteert eigenlijk beter (link)
  • Castle heeft een schonere, gemakkelijk te gebruiken API bijvoorbeeld het aanroepen van de doelmethode naar Castle DynamicProxy ziet er als volgt uit:

invocation.Proceed();

voor LinFu ziet het er zo uit (de naam van de feitelijke methode / eigenschap kan verschillen als ik het vanuit het geheugen schrijf)

//invocation.TargetMethod is MethodInfo, so you're using reflection
invocation.TargetMethod.Invoke(invocation.Target,invocation.Parameters);
  • Castle heeft een actieve gebruikersgroep waar je snel antwoord op je vragen kunt krijgen.

Het prestatieprobleem, genoemd door het andere antwoord, is geen DynamicProxy-probleem, maar is het gevolg van een fout bij de implementatie door Microsoft van BCL (op Mono is er geen dergelijk probleem). Dit manifesteert zich alleen wanneer u veel (meer dan 200+) proxy-typen in één ModuleScope hebt.

Oplossing is triviaal - genereer niet zoveel proxy-typen (meestal niet nodig) of gebruik veel ModuleScopes / ProxyGenerators (Rhino.Mocks gebruikt deze aanpak bijvoorbeeld)

Persoonlijk ontwikkel ik me niet op Mono, dus ik heb geen ervaring uit de eerste hand, maar er zijn bibliotheken die Castle DP gebruiken op Mono, en we hebben geen complieints gekregen dus ik denk dat het prima werkt.

Sinds mijn benchmark enkele maanden geleden, is er geen nieuwe versie van Castle DP uitgebracht (de nieuwe versie is aan het einde van het jaar bedoeld). LiFu heeft een 2.0-versie, maar ik weet niet zeker of het alleen trunk is of dat het is vrijgegeven. Ik weet het niet van Spring of Unity.


20
2017-09-10 19:22



Linfu is een lichtere proxygenerator dan de Castle-proxygenerator.

Bij het kiezen van te gebruiken, maakt het eerlijk gezegd niet veel uit.

Volgens de auteur zal Linfu veel beter presteren dan de Castle-generator, maar in mijn eigen waarnemingen van het echte wereldgebruik is het snelheidsverschil marginaal.

Dat gezegd hebbende, zal Linfu beter presteren dan Castle, en ik ben niet op de hoogte van wat Castle erover heeft, en dus gebruik ik altijd Linfu.


10
2017-09-10 18:09



We hadden een aantal perf problemen met LinFu vs Castle in 2.0.1. http://niemware.blogspot.com/2009/11/nhibernate-21-performance-issues-with.html


4
2017-11-17 21:36