Frage

Wir haben begonnen zu verwenden Frühling AOP für Querschnittsaspekte unserer Anwendung (Sicherheit & Caching im Moment).

Mein Manager Sorgen über die Auswirkungen auf die Leistung dieser Technologie, obwohl er die Vorteile voll versteht.

Meine Frage, haben Sie durch die Verwendung von AOP (speziell Frühling AOP)?

eingeführt Leistungsprobleme auftreten
War es hilfreich?

Lösung

Solange Sie haben die Kontrolle Ihres AOP Ich denke, es ist effizient. Wir haben Leistungsprobleme sowieso, also durch eigene Argumentation wir die Kontrolle nicht vollständig waren;) Dieser meist war, weil es wichtig ist, dass jemand, der Aspekte hat, schreibt voll Verständnis aller andere Aspekte im System und wie sie miteinander in Beziehung. Wenn Sie beginnen „smart“ Dinge zu tun, können Sie sich in einem Augenblick austricksen. Doing intelligente Dinge in einem großen Projekt mit vielen Menschen, die nur kleine Teile des Systems sehen kann sehr gefährlich leistungsmäßig sein. Dieser Rat wahrscheinlich ohne AOP gilt auch, aber AOP können Sie sich in den Fuß in ein paar echte elegante Weise schießen.

Spring verwendet auch Proxying für Rahmen-manipluations und das ist ein Bereich, wo es leicht unerwünschte Leistungsverluste zu erhalten.

Aber da Sie die Kontrolle haben, die einzige wirkliche Schwachpunkt mit AOP ist die Wirkung auf das Debuggen.

Andere Tipps

Wenn die Leistung ein Anliegen sein wird, haben wir AspectJ mit großem Erfolg eingesetzt.

Weil es verwendet Bytecode Weberei (kompilieren Zeit gegen die Laufzeit recht den Unterschied macht), es ist eines der am schnellsten AOP-Frameworks da draußen. Siehe: AOP Benchmarks

Wenn ich es benutzt, habe ich nicht -. Aber dann meine Anwendung ist nicht Ihre Anwendung

Wenn Sie es für Anrufe verwendet werden, die in einem sehr engen Schleife verwendet werden, gibt es die Gelegenheit für einen erheblichen Leistungseinbußen. Wenn es nur verwendet wird Sicherheit einmal verschiedene Dinge pro Anfrage und Cache zu überprüfen, kann ich nicht sehen, wie es ist wahrscheinlich erheblich sein -. Aber das ist, warum sollten Sie das Profil und Benchmark Ihre app

Ich weiß, dass „mit Ihrer App messen“ ist wahrscheinlich nicht die Antwort, die Sie gesucht haben, aber es kann auch derjenige sein, Sie ahnen würden Sie bekommen:)

Wenn Sie mit Proxy-basierten AOP, Sie sprechen über 1 zusätzlichen Java-Methodenaufruf pro angelegtem Aspekt. Die Auswirkungen auf die Leistung ist ziemlich gering. Die einzige wirkliche Sorge ist die Schaffung der Proxies aber dies geschieht in der Regel nur einmal auf Start der Anwendung. Der Spring Blog hat einen großen Beitrag zu diesem Thema:

http://blog.springsource.com / 2007/07/19 / Entlarvung-Mythen-Proxies-Impact-Performance /

In der Theorie, wenn Sie AOP tun verwenden, was Sie mit harter Kupplung tun könnten, gibt es kein Performance-Problem, kein Overhead und keine zusätzliche Methode aufruft, wenn Sie für nichts weben. AOP Framework bietet Ihnen eine Möglichkeit, die harte Kopplung und faktorisieren Ihr greifendes Anliegen zu entfernen.

In der Praxis AOP-Framework kann drei Arten von Kopf vorstellen:

  • Feuerzeit
  • Abhören Mechaniker
  • Verbraucher Integration (Art und Weise eine Beratung zu entwickeln)

Für weitere Informationen können Sie sich beziehen href="https://stackoverflow.com/questions/18735857/when-is-aop-code-executed/41107923#41107923"> auf .

Nur vorsichtig sein, wie Sie einen Rat implementieren, da Quer Code eine Versuchung für Boxen / Unboxing und Reflexion (teuer in der Bezeichnung der Leistung) ist.

Ohne AOP Framework (harte Kopplung Ihre Querschnittsthemen) können Sie Ihre mutmaßlichen Ratschläge (dedicated für jede Behandlung) leichter ohne Boxen / Unboxing und Reflexion entwickeln.

Sie müssen wissen, dass die meisten AOP-Framework bieten nicht die Art und Weise völlig Boxen / Unboxing und Reflexion zu vermeiden.

Ich entwickelte ein auf die meisten fehlenden Bedürfnisse 3 Dinge konzentriert zu reagieren:

  • benutzerfreundlich (leicht, einfach zu erlernen)
  • transparent (kein Brechen Code enthalten)
  • effizient (kein Boxen / Unboxing, keine Reflexion des nominalen Benutzercode und gut Interception Mechaniker)
Puresharp API .net 4.5.2+ vorher <:

Sie können meine Open-Source-Projekt finden Sie hier a href = "https://github.com/Virtuoze/NConcern" rel = "nofollow noreferrer"> NConcern .NET AOP-Framework

Haben Sie schon einmal über ein AOP-Tools gedacht, die Aspekte Hinzufügen zur Laufzeit-Objekt, wenn Sie brauchen? Es gibt eine für .net "Add Aspekte mit dem Dynamic Decorator auf Object" (http://www.codeproject.com/KB/architecture/aspectddecorator.aspx). Ich glaube, Sie können ein ähnliches ein für Java schreiben.

Wenn Sie etwas ein Rahmen für die Aspekte verwenden kann es einige Performance-Probleme sein .Next wenn Sie Abstraktion schaffen über einem ein Rahmen und Aspekte von Rahmen ist der Umgang erfolgt dann seine sehr schwierig, die Ursache des Problems, um herauszufinden, in Zusammenhang mit Performance-Probleme . Wenn Sie wirklich besorgt über Leistung und kleine Zeitscheibe Sorge mehr sind, schlage ich eigene Aspekte schreiben .No man das Rad neu zu erfinden wollen, aber irgendwann besser kann es sein best.You eigene Implementierung von AOP Allianz Abstraktion schreiben kann.

i Frühling AOP in einem Batch-Prozess zur Transaktion in meinem aktuellen Projekt verwendet habe, verwaltet eine Datenbank.

Zuerst war es dachte, dass es keine Performance-Problem sein würde, aber wir haben Figur nicht in die Gleichung, dass wir die Datenbank tausende Male genannt. ein Aspekt Aufruf in AOP beeinflusst die Leistung nicht viel, aber multiplizieren, dass von Tausenden, und es stellt sich das neue System aus war schlimmer als die alte, aufgrund dieser zusätzlichen Methodenaufrufe.

würde ich sagen, dass AOP ein großartiges System ist, zu verwenden, aber versuche Hinweis, wie viele Methoden Anrufe zu Ihrer Anwendung hinzugefügt nehmen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top