benötigte RAM wird immer grösser

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    benötigte RAM wird immer grösser

    Ich habe ein vb.net Programm, welches jede Sekunde in einer Tabelle prüft, ob ein zu verarbeitender Datensatz hineingeschrieben wurde.
    Dazu öffne ich alle 1 sec die DB connection und schliesse sie dann wieder.
    Dies mache ich, da das Programm 12 am Stück laufen muss und eine zu Beginn geöffnete DB connection zwischendurch unterbrochen werden könnte.
    Das Problem ist, dass dadurch immer mehr RAM belegt wird. (Zu Beginn 4MB, danach je ca. 0.1MB/min dazu. Dies wären in 12h ca 75MB für das, dass es nur ein Tabellenüberwacher ist.)

    1. Variante zur Lösung:
    - gibt es eine Möglichkeit, mit der ich prüfen kann, ob die DB connection noch steht? Dann müsste ich sie nur dann neu aufbauen, wenn sie unterbrochen wurde.
    Ich importiere System.Data.SqlClient und öffne die DB mit
    New SqlConnection(connector.ConnectionString)

    2. Variante zur Lösung
    - wie kann ich verhindern, dass immer mehr RAM belegt ist? bzw. zwischendurch wieder freigeben? garbage collection, habe ich gelesen, sei ungeeignet.
    @Minique Willkommen im Forum. :thumbup:
    Irgendwo hast Du eine Variable, die mit .Dispose() aufgeräumt werden muss, bevor die Prozedur verlassen wird.
    .NET stellt hierfür die Using-Funktionalität zur Verfügung, da wird unter allen Bedingungen sicher gestellt, dass der Speicher aufgeräumt wird.
    Wenn Du mal Deinen Codwe postest, können wir mal drüber schauen und Dir die Lösung posten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie lange hast du das Programm laufen lassen um deine Aussage verifizieren zu können? Kann ja sein, das der beanspruchte Arbeitsspeicher erst anwächst und dann konstant bei x MB bleibt.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Der Garbage Collector räumt auch nur periodisch auf. Kann also sein das alle x-sekunden/minuten Speicher feigegebeben wird.
    Dein Programm speicher steigt, wird freigeben, steigt wieder.

    Gibt zwar eine methode GC.Collect(), muss/sollte man aber eigentlich nicht verwenden.
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!
    Danke für die schnellen Antworten

    Ich habe das Programm gestern bis 3h getestet und irgendwann pendelt es sich bei 9MB ein. Das ist akzeptabel. Den 12h-Test habe ich noch nicht gemacht.
    New SqlConnection(connector.ConnectionString) ist dadurch entstanden, da ich eine fremde DLL verwende, die in Open() u.a. eben auch New SqlConnection() erzeugt.
    Dann werde ich wohl eine eigene Funktion schreiben.

    Danke für die Tipps