Announcement

Collapse
No announcement yet.

AppSettings performant laden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • AppSettings performant laden

    Hallo Leute!

    Stehe gerade vor einem Problem, jedoch fehlt mir eine Lösung/Lösungsansatz dafür.

    Ich habe eine Web-Anwendung die hochperformant sein muss. Jetzt muss ich, der Übersichtlichkeit halber, die AppSettings aus der Web.conf in die Datenbank verlagern.

    Die AppSettings werden beim ersten Laden einer Seite aus der Datenbank geholt. Ich sperre mittels einem LockingObject und lade, sofern noch nicht im ApplicationContext vorhanden, die Daten, welche dann in Application["AppSettings"] abgelegt werden.

    Nun habe ich das Problem, dass oft >1000 Anfragen/ms reinkommen und somit beim Start der Applikation viele Anfragen auf die Datenbank losgehen (da das Laden der Settings noch nicht fertig ist, und somit noch nicht im ApplicationContext vorhanden sind.

    Ich hätte zunächst gedacht, dass Application_Start das Problem beheben würde, jedoch wird dies ja auch erst beim ersten Request einer Seite ausgeführt, was somit nicht besser wäre als mein Ansatz.

    Hat jemand eine Idee wie man das am besten bewerkstelligen kann und ob es eine Möglichkeit gibt vor fertiggestelltem Applikationsstart garantiert die AppSettings zu laden?

    tia void

  • #2
    Schlagwörter "ASP.NET Cache" und "ASP.NET Datenbank Connection Pool"
    Bitte vergessen Sie nicht die Antwort zu bewerten. Danke.:-)

    Comment


    • #3
      Es geht hier konkret um den Start der Applikation. Die Seiten an sich werden bereits gecached und der Datenbank Connection Pool wird bereits von der Persistenzschicht verwaltet.

      Comment


      • #4
        Originally posted by void View Post
        Es geht hier konkret um den Start der Applikation. Die Seiten an sich werden bereits gecached und der Datenbank Connection Pool wird bereits von der Persistenzschicht verwaltet.
        Normalerweiße werden "applikation settings" nur ein mal aus web.config ausgelesen, danach speichert iis die im Cache.

        Du hast (wenn ich richtig verstanden habe) die Daten (Applikation Settings) in eine Datenbank ausgelagert. Deshalb geht es jetzt darum, wie schnell du die Daten aus der Datenbank ausließt. Du sagst, es sind >1000 Anfragen/ms reinkommen

        "Reusing" von Datenbank connections könnte Performance verberssern.
        D.H. es werden nicht 1000 Verbindungen/ms aufgebaut, sondern die aktive benutzt.

        Das könnte man erreichen indem man gleichen Datenbankbenutzer für alle Connections benutzt.
        bzw. gleiche Connection String und von Integratet Sequrity verzichtet.

        Auserdem könnte man SQlDataReader benutzen, da er nur in eine Richtung und deshalb schneller die Daten aus der Datenbank ausliest.

        Connection müsste so schnell wie möglich geschlossen sein. Somit wird es dem Pool zurückgegeben und für anderen Anfragen zur Verfügung gestellt. (Schlüsswort "using", siehe code unten)

        Davor müssen natürlich Benutzertransaktionen geschlossen werden.

        Code:
        using(SqlConnection sqlConnection = new SqlConnection(connectionString))
        {
          sqlConnection.Open();
          //Some Code
        }
        Letztendlich hilft Monitoring:

        1. sp_who or sp_who2 stored procedures

        2. SQL Server Profiler

        3. Performance Monitor , Performance Counters

        Hoffentlich das hilft
        Zuletzt editiert von vadym voytas; 15.04.2010, 22:41.
        Bitte vergessen Sie nicht die Antwort zu bewerten. Danke.:-)

        Comment

        Working...
        X