Announcement

Collapse
No announcement yet.

.NET-Programm extrem langsam, wenn lange Zeit unbenutzt.

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

  • .NET-Programm extrem langsam, wenn lange Zeit unbenutzt.

    Ich habe (in VS2008) eine Windows-Anwendung erstellt.
    Wenn sie gestartet und längere Zeit nicht verwendet wird, verhält sie sich bei Wiederverwendug
    1. extrem langsam (sicherlich aufgrund Wiederherstellung im Hauptspeicher aus der Auslagerungsdatei).
    2. fortan nur noch langsam! Warum?

    Beispiele für langsames Verhalten:
    - Die Auswahl einer DataGridView-Zeile (per Mausklick oder Pfeiltasten).
    - Öffnen eines Formulars (mit DataGridView).
    - DataGridView filtern (mit System.Windows.Forms.BindingSource.Filter)

    Programmgröße: 10MB
    Hauptspeicher: 3GB
    Speicherbedarf:
    - nach Programmstart: 60MB
    - bei Normalverwendung: 100MB
    - bei Extremverwendung: 200MB

  • #2
    Hallo,

    der 1. Punkt deiner Feststellung ist so korrekt und braucht daher nicht weiter diskutiert werden.

    Den 2. Punkt kann ich (pauschal) nicht bestätigen aber auch nicht unbedingt widerlegen da dazu die Angaben zu unscharf sind.

    Könnte es möglich sein dass in der Anwendung ein Speicherleck herrscht?
    Hast du das Programm mit einem Profiler beobachtet?

    Mehr kann ich von diesem STandpunkt aus nicht beisteuern.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      der 1. Punkt deiner Feststellung ist so korrekt und braucht daher nicht weiter diskutiert werden.
      Damit bin ich nicht einverstanden.
      Auslagerungsdatei ist abhängig vom allgemeinen Speicherbedarf.
      Wird Speicherbedarf optimiert sein, so wird auch die Auslagerungsdatei kleiner sein.

      Allgemeine Lösung gibt's in deinem Fall nicht. Man muss die Quellcode anschauen.
      Meine Empfehlung: recherchiere zum Thema "dotnet memory usage"
      Ein dummes Beispiel:
      Was ist schneller string + string oder StringBuilder.Append ?
      Hier ist die Erklärung von MS:
      Die Leistung eines Verkettungsvorgangs für ein String-Objekt oder ein StringBuilder-Objekt richtet sich nach der Häufigkeit der Speicherzuordnung. Bei einem String-Verkettungsvorgang wird immer Speicher zugeordnet; bei einem StringBuilder-Verkettungsvorgang wird hingegen nur Speicher zugeordnet, wenn der StringBuilder-Objektpuffer zu klein für die Aufnahme neuer Daten ist. Wenn eine feste Anzahl von String-Objekten verkettet wird, empfiehlt sich daher die Verwendung der String-Klasse für einen Verkettungsvorgang. Die einzelnen Verkettungsvorgänge können dabei vom Compiler sogar in einen einzigen Vorgang zusammengefasst werden. Wenn eine nicht festgelegte Anzahl von Zeichenfolgen verkettet werden soll, empfiehlt sich die Verwendung des StringBuilder-Objekts, z. B. bei einer Schleife, die eine beliebige Anzahl von Zeichenfolgen verkettet, die vom Benutzer eingegeben wurden.
      Bitte vergessen Sie nicht die Antwort zu bewerten. Danke.:-)

      Comment


      • #4
        Vielen Dank für die Beiträge und Anregungen.
        Habe mir einen Profiler besorgt und werde mein Programm noch einmal gründlich bzgl. Speicherthematik überarbeiten.

        Comment

        Working...
        X