Geschwindigkeitsmessungen in ASP
Geschrieben von: Christoph Wille Ein von Anfängern oft übersehener Bereich der Programmierung ist die Optimierung des geschriebenen Codes. Aber auch Experten sollten sich dieses Themas annehmen - denn nur eine Geschwindigkeitsmessung kann genauen Aufschluß über die Performance verschiedener Lösungsansätze bringen. Gefühlsmäßige Entscheidungen sind meist falsch. Nehmen wir als Beispiel die Diskussion um das Formatieren der Zahl 0 aus der AspGerman Newsliste. Folgender Code wurde vorgeschlagen: Replace(FormatNumber(Variable, 2, -1),"0,00","0")Abgesehen davon, daß neben der gewünschten Umwandlung von 0,00 in 0 auch alle zehnfachen (70,00 etc) gekürzt werden (in 70), hat dieser Lösungsansatz gegenüber Function Waehrung(Variable) If Variable <> 0 then Waehrung = FormatNumber(Variable, 2, -1) Else Waehrung = "0" End If End Functionsogar einen krassen Geschwindigkeitsnachteil - und zwar von über 330 Prozent! Und das bei einer Implementierung als Funktion! Inline wäre er sogar noch um vieles größer (500 Prozent). Und wie komme ich zu diesen Zahlen? Ganz einfach: da wir hausintern große Seiten zu optimieren haben, habe ich eine Komponente zur Geschwindigkeitsmessung programmiert (gratis erhältlich bei IISDEV auf unserem Server). Ich habe die oben vorgestellten Lösungsansätze mit der Profiler Komponente gemessen, und zwar mit folgender ASP Datei: <% Function Waehrung(Variable) If Variable <> 0 then Waehrung = FormatNumber(Variable, 2, -1) Else Waehrung = "0" End If End Function Dim xObj, i, Variable, interim, runCount Dim timerStart, timerDiff, profileElapsed, prfTime1, prfTime2 Set xObj = Server.CreateObject("Softwing.Profiler") runCount = 100 Variable = 0 xObj.ProfileStart() For i = 1 To runCount interim = Replace(FormatNumber(Variable, 2, -1),"0,00","0") Next profileElapsed = xObj.ProfileStop() prfTime1 = profileElapsed / runCount Variable = 0 xObj.ProfileStart() For i = 1 To runCount interim = Waehrung(Variable) Next profileElapsed = xObj.ProfileStop() prfTime2 = profileElapsed / runCount Response.Write (prfTime1/prfTime2*100) %> Erwähneswert ist die Variable runCount: da ein einziger Durchlauf keine Aussagekraft hat, muß man den Code in einer Schleife laufen lassen und den Mittelwert bilden. Der Einfachheit halber habe ich 100 Durchläufe eingestellt - und dennoch wird bei jedem Aufruf dieser Seite sich der Prozentsatz ändern (der Grund ist zb die Zuweisung der Prozessorzeit an den IIS, etc). Die Zahlen, die ich ermittelt habe, stammen von einem PIII 450, IIS 5.0 RC1. Was lernen wir aus diesem Beispiel? Vermeintlich elegante oder kurze Lösungen sind nicht immer die schnellsten. Und Entscheidungen über Geschwindigkeitsvorteile sollten nie aus dem Bauch heraus getroffen werden. Verwandte Artikel
Highspeed-Abfragen einer SQL Server Datenbank Links zu anderen SitesWenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |