Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    180

    [C#]Come ripulire la ram dopo start applicazione

    Ciao a tutti! Ho creato una piccola applicazione che serve a lanciare diverse utility. Monitorando la memoria occupata dal processo principale, ho visto che via via che si lanciano queste utility la memoria cresce di poco, però una volta terminati, l'ammontare di memoria occupato resta sempre lo stesso e non cala.

    Consideriamo A come l'applicazione principale e B e C come le utility lanciate tramite A.

    Lancio A: mem occupata 15.000KB
    Lancio B: mem occupata 15.700KB
    Chiudo B: mem occupata 15.700KB
    Lancio C: mem occupata 15.900KB
    Chiudo C: mem occupata 15.900KB

    Il codice che uso per lanciare le applicazioni è questo:

    codice:
                        int Timeout = 1;
                        ProcessStartInfo ProcessInfo;
                        Process Process;
                        ProcessInfo = new ProcessStartInfo("appz.exe", " -parameter");
                        ProcessInfo.CreateNoWindow = true;
                        ProcessInfo.UseShellExecute = true;
                        Process = Process.Start(ProcessInfo);
                        Process.WaitForExit(Timeout);
                        Process.Close();
    Come posso garantire un corretto svuotamento della memoria? Grazie a tutti!

  2. #2
    GC.Collect(), ma in generale sarebbe meglio lasciare che il GC faccia il suo mestiere per i fatti suoi.
    Dato poi che Process è IDisposable, io lo racchiuderei in un blocco Using.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Non centra il GC con tutto questo.
    In questo caso è il sistema operativo che gestisce la memoria.
    Ma io non ho ancora capito cosa devi fare e lo scopo di questo programma.
    I got the remedy

  4. #4
    Originariamente inviato da albgen
    Non centra il GC con tutto questo.
    In questo caso è il sistema operativo che gestisce la memoria.
    Io avevo capito che il programma principale (che è in .NET) occupa sempre più memoria... in questo caso teoricamente un GC.Collect() dovrebbe rimuovere tutti gli oggetti inutilizzati.
    Ma io non ho ancora capito cosa devi fare e lo scopo di questo programma.
    Ecco, siamo in due.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    180
    E' un tool che serve a lanciare dei comandi dos, batch ecc.. E' semplicissimo. Il problema è proprio questo, quando dall'applicazione lancio un batch, la memoria occupata dall'applicazione principale aumenta, però quando il batch termina e si chiude, la ram occupata dall'applicazione principale non decresce ma resta sempre la stessa, come se il batch fosse ancora in esecuzione (e non è così).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.