Wie kann ich meine ASP.NET app halten immer „lebendig“, und wenn sie eine schlechte Idee, warum soll ich nicht tun?

StackOverflow https://stackoverflow.com/questions/817655

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe vor kurzem eine ASP.NET-Anwendung zu meinen glänzenden neuen VPS eingesetzt und während ich mit der allgemeinen Leistungssteigerung bin glücklich, dass ein VPS kann eine Shared-Hosting-Lösung übergeben, ich bin unzufrieden mit der Startzeit meines Anwendung.

Meine Web-Anwendung nimmt eine Menge Zeit bis zu starten, wenn mein Kunde zuerst trifft. Ich bin nicht im Debug-Modus ausgeführt wird (deaktiviert, dass in meinem web.config), und es keine wirkliche Arbeit beim Start zu tun haben - ich keinen Code in meiner Anwendung Start-Ereignishandler habe, beginne ich nicht jeden zusätzliche Fäden, nichts. Das erste Mal, wenn mein Kunde trifft meine Anwendung es dauert gut 15 bis 20 Sekunden zu reagieren. Anschließende Anrufe nehmen Sie 1-2 Sekunden, wenn ich ein paar Minuten für meine Anwendung warten herunterzufahren. Dann ist es wieder zu einer 15-20 Sekunde Anlaufzeit.

(Ich bin mir bewusst, dass mein Timing Benchmark sehr unwissenschaftlich ist, sollten diese Zahlen geben nur ein Gefühl für die Leistung beim Start meiner app).

Mein Verständnis von ASP.NET war, dass IIS (7.0, in diesem Fall), einer Web-Anwendung zum ersten Mal kompiliert es jemals ausgeführt wird, und dann speichert die Binärdateien, bis eine Zeit, wie die Web-Anwendung geändert wird. Ist mein Verständnis falsch?

So, nach diesem Buch großer Vorrede, hier sind meine Fragen:

  • Ist mein Verständnis von ASP.NET die Erstellung nicht richtig? Wie funktioniert es eigentlich?
  • Gibt es eine Möglichkeit, ich IIS zwingen kann meine Binärdateien zwischenzuspeichern, oder halten meine Anwendung am Leben auf unbestimmte Zeit?
  • Wenn es eine schlechte Idee ist entweder die Dinge in meiner vorherigen Frage zu tun, warum ist es eine schlechte Idee, und was kann ich tun, anstatt Startleistung zu erhöhen?

Danke!

Edit: es scheint, meine Frage ist ein leichtes Duplikat diese Frage (ich dachte, dass ich hier auf dieses eine Antwort zu suchen, einen besseren Job gemacht haha). Ich denke aber, dass meine Frage ist umfassender, und ich würde es begrüßen, wenn es nicht als Duplikat geschlossen wurde, es wäre denn es ist besser, bereits gestellte Fragen hier, dass diese Adresse.

War es hilfreich?

Lösung

IIS schließt auch Ihren Web-App nach einer bestimmten Zeitperiode ab, von seiner Konfiguration abhängig. Ich bin nicht so vertraut mit IIS7 und wo diese zu konfigurieren, so dass Sie eine wenig Forschung darüber, wie diese (konfigurieren tun möchten Ausgangspunkt? ).

Ist es schlecht? Hängt davon ab, wie gut Ihr Code. Wenn Sie sich nicht undicht Speicher oder Ressourcen, wahrscheinlich nicht.

Die andere Lösung ist auf precompile Ihre Website . Dies könnte die bessere Option für Sie sein. Sie werden es überprüfen und sehen, aber, wie es mit einem Nachteil kommen kann, je nachdem, wie Sie mit Ihrer Website interagieren.

Andere Tipps

  

Mein Verständnis von ASP.NET war, dass IIS (7.0, in diesem Fall), einer Web-Anwendung zum ersten Mal kompiliert es jemals ausgeführt wird, und dann speichert die Binärdateien, bis eine Zeit, wie die Web-Anwendung geändert wird. Ist mein Verständnis falsch?

Das ist richtig. Insbesondere werden die Baugruppen als Schattenkopien gebaut (nicht mit der Volume Snapshot Service / Schattenkopie-Funktion verwechselt werden). Dadurch können Sie den Code in dem Ordner im laufenden Betrieb ausgetauscht werden, ohne bestehende Laufeinheiten zu beeinflussen. ASP.NET wird die Änderung, erkennen und neue Versionen in das Zielverzeichnis kompilieren (in der Regel Temporary ASP.NET Files). Mehr zu diesem Prozess: Verständnis ASP.NET Dynamic Compilation

Wenn seine rein die Kompilierung dann oft der effizienteste Ansatz ist die Website selbst nach der Rückführung zu treffen. Tätigen eines Anrufs in regelmäßigen Abständen, um sicherzustellen, dass es Ihnen ist, der die 15 Sekunden erhält Verzögerung nicht Ihre Kunden.

Ich wäre überrascht, wenn das alles Kompilierung (je nach Hardware) jedoch ist - haben Sie eine Menge von statischen Instanzen von Klassen? Tun sie eine Menge Arbeit auf Start-up?

Entweder mit Tracing oder Profilieren Sie könnten wahrscheinlich recht schnell feststellen, wo die Startzeit ausgegeben wurde.

Wie, warum um einen Prozess zu halten, ist eine schlechte Idee, ich glaube, sein aufgrund klar-up. Egal, wie gut wir kümmern uns um unsere Daten oder wie gut erzogene der GC ist, gibt es ein gutes klares-up durchgeführt durch den Prozess neu zu starten. können Dinge wie Fragmentierung weggehen und andere Ressourcenprobleme, die im Laufe der Zeit aufbauen werden abgebaut. Deshalb ist es eine ganz schlechte Idee, einen Server-Prozess zu halten, auf unbestimmte Zeit ausgeführt wird.

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