Programm frisst immer mehr speicher

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Mad Andy.

    Programm frisst immer mehr speicher

    hallo,

    ich habe ein programm geschrieben, welches immer mehr speicher frisst. am anfang sind es etwa 7 mb. nach einer stunde sind es dann schon 18 und ich nehme stark an, dass das weiterhin so stark steigen wird.
    das programm zeigt eigentlich nur grafisch an was gerade gespielt wird (musik).

    gibt es vllt so klassische tips worauf man achten sollte, wenn man so einen starken anstieg des speicheranspruchs vermeiden will?

    oder gibt es vllt irgendeine funktion, die alles auflistet was mein programm in den speicher schreibt? dann kann ich vllt mal mitverfolgen wo der speicherfresser sitzt ^^
    Es gibt allgemein Profiler. Sie loggen mit, welche Funktionen dein Programm aufruft, und ich glaube auch, wieviel und mit was dein RAM benutzt wird. Such z.B. mal bei Sourceforge, da wirsd du relativ sicher was finden.
    Sonst allgemein Tipps: Objekte sofort zerstören, wenn sie nicht mehr gebraucht werden.

    MfG dusti
    hi, danke für den tip. ich habe mir mal eine testversion von ants runtergeladen. aber sonderlich weitergeholfen hat es mir nicht :/

    ich versuch mal meinen code so zu analysieren. wenns nicht klappt bau ich eben einen neustart nach jeder stunde ein ^^ (scherz)
    es liegt vielleicht dran, dass du i-ein array hast oder so, der immer mehr speicher reserviert

    ich kenne mich da nicht so besonders aus aber vllt liegt da das problem

    ich habe schon mal versucht ein programm so sparsam wie möglich zu machen (code wird unendlich BREIT und fast keine Variaben genutzt, aber wegen dem Framework hat es mir nicht viel gebracht)

    ein stink normale GUI verbraucht schon 12-14 MB RAM bei mir wegen dem Framework
    hm, habe auch festgestellt das mein Programm immer mehr frisst

    wenn ich etwas ausführe (etwa eine funktion) reserviert es noch speicher, lässt aber das davor reservierte nicht los.

    kann man i-wie die variablen freigeben?

    mit .Nothing geht es glaube ich nicht, weil es ja nur auf 0-wert setzt, oder?
    Habt ihr viele globale Variablen angelegt? Man sollte Variablen die man wirklich nur in einer bestimmten Schleife oder Funktion braucht nicht global oder als Klassenmembervariable/public/static deklarieren sondern nur da wo man sie braucht, dann sind diese automatisch nach Schleifen-/Funktionsende aus dem speicher gelöscht. Objekte konnte man in VB6 mit "Set obj = Nothing" löschen, müsste in .net ähnlich sein. Evtl gibt es da sowas wie obj.free() oder obj.Finalize() oder sowas in der Art.
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    hmm, also ich habe 8 globale variablen. ist ja eigentlich nicht so viel. und die werden von anfang an alle genutzt, also erklärt es ja eigentlich nicht warum sich der ressourcen-anspruch verdoppelt, oder?

    naja, gibt anscheinend keine richtige lösung.
    Hi!

    In wenn du COM-Komponenten oder andere nicht-dot-net-Sachen (u.U. auch über dot-net-Wrapper!!) verwendest, dann musst du den reservierten Speicher immer disposen!

    Dim myObject as new myClass
    myObject.Dispose()

    Das myObject = nothing kannst du dir meistens sparen, weil am Ende der Sub / Funktion die lokale Variable sowieso vernichtet wird. Wenn du aber meinst das unbedingt zu brauchen, kommt das nach dispose.

    Am besten schaust du bei jeder Instanz nach, obs eine Dispose-Methode gibt :)

    Ansonsten:
    Strings und Listen auf Möglichkeit immer lokal dimensionieren, da die gerne ins unermessliche wachsen ^^

    Für alles weitere brauchen wir Quelltext..


    so long..
    Andy

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mad Andy“ ()

    Original von Mad Andy
    Das myObject = nothing kannst du dir meistens sparen, weil am Ende der Sub / Funktion die lokale Variable sowieso vernichtet wird.



    wie gesagt, bei mir bleibt der speicher reserviert und mit jeder neuer funktion wird noch mehr speicher reserviert

    mann kann das so schönmit task-manager beobachten :(