2009-05-30 2 views

Antwort

1

Es hängt alles von Regeln ab, die Sie während der Codeanalyse ausführen, aber ich glaube nicht, dass Sie Leistungsengpässe nur durch CA verhindern können.

Von meiner abgelaufenen sieht es aus, dass Leistungsprobleme in der Regel ziemlich kompliziert sind und echte Probleme zu finden, müssen Sie Leistungstests ausführen.

+0

Es hängt alles von Regeln ab, die Sie während der Codeanalyse ausführen Gibt es irgendwelche Grundregeln, die gegen den Code ausgeführt werden müssen, der helfen würde? – balalakshmi

+0

Es hängt von Rahmen ab, den Sie verwenden. Zum Beispiel verwende ich FxCop (für .NET-Lösungen). Es gibt eine Reihe vordefinierter Leistungsregeln: http://msdn.microsoft.com/en-us/library/ms182260.aspx Aber wie ich bereits erwähnt habe, glaube ich nicht, dass sie auf echte Probleme abzielen. – brzozow

0

Nein, außer in sehr kleinen Fällen (z. B. für Java, verwenden Sie StringBuilder in einer Schleife und nicht in einer angehängten Zeichenfolge).

Der Grund ist, dass Sie nicht wissen, wie sich ein bestimmter Code auf die gesamte Anwendung auswirkt, bis Sie die gesamte Anwendung mit dem relevanten Datensatz ausführen.

Zum Beispiel: Das Ändern von bubblesort in quicksort würde Ihre Anwendung nicht wesentlich beeinträchtigen, wenn Sie regelmäßig Listen mit einem halben Dutzend Elementen sortieren. Oder wenn Sie die Sortierung einmal mitten in der Nacht ausführen und andere Prozesse nicht verzögern.

0

Wenn wir .NET sprechen, dann ja und nein ... FxCop (oder eingebaute Code-Analyse) hat eine Reihe von Regeln, die sich mit Performance-Bedenken befassen. Diese Liste ist jedoch ziemlich kurz und von begrenzter Natur.

Nichtsdestoweniger gibt es keinen Grund, dass FxCop nicht mit viel mehr Regeln (heuristisch oder anders) erweitert werden könnte, die potenzielle Problembereiche aufspüren und sie kennzeichnen. Es ist einfach eine Tatsache, dass niemand (von dem ich wüsste) (noch) bedeutende Arbeit geleistet hat.

0

Generell nein, obwohl from experience kann ich bei einem System sehe ich noch nie gesehen habe und einige Design-Ansätze erkennen, die Performance-Probleme anfällig sind:

  • Wie groß ist es, im Hinblick auf die Linien Code oder Anzahl der Klassen? Dies korreliert stark mit Leistungsproblemen, die durch Überentwurf verursacht werden.

  • Wie viele Schichten der Abstraktion gibt es? Jede Schicht ist eine Chance, mehr Zyklen als notwendig zu verbringen, und dieser Effekt verbirgt sich, besonders wenn jede Operation als "ziemlich effizient" wahrgenommen wird.

  • Gibt es separate Datenstrukturen, die übereinstimmen müssen? Wenn ja, wie wird das gemacht? Wenn durch Benachrichtigungen versucht wird, die Datenstrukturen eng synchron zu halten, ist das eine rote Markierung.

  • Von den Kategorien der Eingangsinformationen zum System ändert sich ein Teil davon bei niedriger Frequenz? Wenn dies der Fall ist, sollte es eher "kompiliert" als "interpretiert" werden. Dies kann ein großer Gewinn sowohl in der Leistung als auch in der Leichtigkeit der Entwicklung sein.

  • Ein häufiges Motiv ist das: Programmierer A erstellt Funktionen, die komplexe Operationen, wie DB-Zugriff, um einen guten Teil der Informationen zu sammeln. Programmierer A hält dies für andere Programmierer für sehr nützlich und erwartet, dass diese Funktionen mit einem gewissen Respekt und nicht beiläufig verwendet werden. Programmierer B schätzt diese leistungsstarken Funktionen und verwendet sie sehr, weil sie so viel mit nur einer einzigen Codezeile machen. (Programmierer B und A können dieselbe Person sein.) Sie können sehen, wie dies zu Leistungsproblemen führt, besonders wenn sie auf mehrere Ebenen verteilt sind.

Das sind die ersten Dinge, die einem einfallen.

Verwandte Themen