2009-06-16 2 views
0

Wir holen mehr als 1000 Datenzeilen von einem externen System und wir müssen die Daten in ein viel besseres Präsentationsformat formatieren, bevor wir es anzeigen an den Endbenutzer auf der Webseite.ASP.Net: Enge Schleife In der Präsentationsschicht

Wenn wir eine Schleife durch die Daten in ASPX Seiten, eine Fest Schleife schaffen (oder enge Schleife?), Die mehr als 95% der CPU verbraucht.

Wie vermeiden wir Spitzen-CPU und hat auch den Prozess so schnell wie möglich abgeschlossen? TIA

+0

Da Ihre CPU vollständig geladen ist, kann das einzige, was Sie tun, ist der Algorithmus (und Code) optimieren Sie tun lokalen verwandeln - aber bedenken Sie, dass, wenn Ihr Programm ist vollständig gebunden cpu es genau sein könnte tun, was Sie es tun wollen .... –

Antwort

4
  1. Kaufen Sie einen schnelleren Server
  2. Kaufen mehrere Server
  3. Sie weniger Arbeit

Sie jede Anstrengung duplizieren hier? Sind es die gleichen 1000 Zeilen bei nachfolgenden Anfragen für die gleichen Daten? Dann sollten Sie vielleicht die Ergebnisse zwischenspeichern? Sind einige der Berechnungen immer wieder dieselben? Dann sollten Sie vielleicht die Ergebnisse der Berechnungen zusammen mit den Rohdaten speichern.

Fazit: Machen Sie keine enge Schleife in der Präsentationsschicht. Es gehört nicht dorthin.

Es tut auch weh Ihrer Skalierbarkeit, BTW. Sie binden Worker-Threads, die andere Anforderungen verarbeiten können, möglicherweise andere Anforderungen, die sich nicht in engen CPU-Schleifen befinden.

+0

Thx, Wir suchen derzeit nach einer Caching-Lösung. Neugierig, warum Sie enge Schleife in der Präsentationsschicht sagen nicht korrekt ist, das Looping in unserem Fall ist es, die Daten in mehr vorzeigbar Format zu formatieren (oder die Schicht keine engen Schleifen gehen, wenn man benötigt?) TIA – Kishork

+1

Es ist mehr, dass es in einem ASP.NET-Programm nicht korrekt ist. Sie binden während dieser Anfrage einen knappen Arbeitsthread, und diese Arbeit sollte mit ziemlicher Sicherheit an anderer Stelle erledigt werden.Inwieweit wird die enge CPU-Schleife von den Einzelheiten der Anfrage beeinflusst? Ändert die Anfrage, welche 1000 Zeilen verarbeitet werden? Ändert die Anfrage den in der Tight-Loop verwendeten Algorithmus? Ist die Verarbeitung jeder Zeile unabhängig von den anderen Zeilen? Wenn dies der Fall ist, sollten Sie die Zeilen im Voraus formatieren und dann vorformatierte Zeilen zurückgeben. –

1

Aufbauend auf Johns # 3, brauchen Sie wirklich 1000 Zeilen Daten? Das klingt nach viel. Benutzer werden es nicht schätzen, das manuell durchgehen zu müssen. Erwägen Sie, Seiten- oder Suchfunktionen anzubieten, die den auf dem Bildschirm angezeigten Betrag auf einmal reduzieren. Wenn Sie dies bereits auf eine kleinere Anzahl von Datensätzen kompilieren, können Sie dies wahrscheinlich effizienter in Ihrer Datenbank tun.

+0

@Joel, ich hatte gehofft, dass er eine Menge Verarbeitung in den 1000 Zeilen machen müsste, und würde dann viel weniger als 1000 Zeilen anzeigen. Wenn er wirklich alle 1000 anzeigt, nachdem er eine Menge an ihnen gemacht hat, dann * autsch *. –

1

Wenn Sie nicht viel wirklich komplizierte Sachen tun, würde ich mich wundern, wie Sie bemerken, dass Ihre CPU für eine merkliche Zeitspanne knirscht nur 1000 Reihen zu drehen. Sie können in einem sehr kurzen Zeitraum ernsthafte Arbeit an einem modernen Server leisten, solange sich die Daten bereits im Speicher befinden (was sich in Ihrem Fall anhört).

Tun Sie Dinge wie immer wieder über die Elemente iterieren (dh. Verschachtelte Schleifen), wenn ein Wörterbuch verwenden würde besser funktionieren? Sehen Sie sich genau an, was Sie tun und überlegen Sie, wie oft jede Codezeile tatsächlich ausgeführt wird.

auf etwa 500.000 Objekte Einige Code, den ich auf der letzten Woche gearbeitet hatte eine Reihe von komplexen Sicherheitsregeln zu bewerten. Der Endcode dauerte ungefähr 3,5 Minuten zum Ausführen - 2 Minuten zum Laden von der Datenbank, 10 Sekunden zum Verarbeiten und 1 Minute 20 Sekunden zum Schreiben der Ergebnisse in die Ergebnisdatei. Sobald Sie alles im Speicher haben, können Sie überraschend schnell Daten abrufen, wenn Sie sicherstellen, dass Sie die Daten nicht öfter als nötig durchlaufen.