Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 33
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338

    [WinForm] occupare poca memoria

    mi sto chiedendo quale metodo sia più opportuno per occupare meno memoria possibile in questo caso: ho un form con una sezione di ricerca e visualizzazione poi dei risultati (diverse migliaia di record) in una datagridview sottostante

    poichè le ricerche possono essere molte durante l'utilizzo dell'applicazione vorrei minimizzare lo spreco di memoria

    x ora lavoro in questo modo:

    codice:
            private void Ricerca()
            {
                //  stringa di connessione al database
                string connStr = "Data Source=server;Initial Catalog=SorveglianzaSanitaria;User Id=xxxx;Password=xxxx;";
                //  comando SQL
                string sqlCmd = "SELECT matricola, cognome, nome, sesso, data_nasc FROM Anagrafiche";
                //  crea data adapter che prepara il comando sul db
                SqlDataAdapter daElenco = new SqlDataAdapter(sqlCmd, connStr);
                //  crea un data table e lo popola con il risultato del comando eseguito dal data adapter
                DataTable dtElenco = new DataTable();
                daElenco.Fill(dtElenco);
    
                //  crea un binding source e lo collega al lato dati
                BindingSource bsElenco = new BindingSource();
                bsElenco.DataSource = dtElenco;
                //  collega il lato visuale del binding source al datagridview
                dgvElenco.DataSource = bsElenco;
    
                //  libera memoria
                daElenco.Dispose();
                daElenco = null;
                dtElenco.Dispose();
                dtElenco = null;
                //  per il binding source non posso fare niente ora
            }
    ha senso la sezione che libera la memoria? se mi spingo oltre con il binding source vien fuori un casino di quelli..

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338
    niet?

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Non puoi sicuramente invocare la Dispose su quegli oggetti che vengono utilizzati dagli elementi visuali del tuo Form, certo a meno di non rinunciare al corretto funzionamento del Form stesso.

    Per garantire la distruzione delle risorse esterne collegate ad un oggetto il prima possibile, puoi usare il costrutto using.

    codice:
    using (SomeType SomeObject = new SomeType())
    {
      SomeObject.DoSomething();
    }
    Per il resto, credo che "tentare di risparmiare memoria" e ".NET Framework" siano due concetti ancora lontani e forse non si avvicineranno così facilmente. Non riesco a mantenere un'applicazione standard con un classico DataGrid al di sotto dei 20 MB, anche con pochi dati. :master:

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da alka
    Non riesco a mantenere un'applicazione standard con un classico DataGrid al di sotto dei 20 MB, anche con pochi dati. :master:
    eh??? ma parli di un semplice .exe con datagrid all'interno?

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Originariamente inviato da dops
    eh??? ma parli di un semplice .exe con datagrid all'interno?
    Esattamente.

    Un'applicazione .NET 2.0 costituita da un Form con un solo pulsante tiene 10 MB precisi.

    Ovviamente, la crescita non è esponenziale: non è che inserendo un controllo e poi un altro il programma raddoppi ogni volta.

    Molto probabilmente, la condizione ideale per il .NET Framework sarebbe quella di avere unicamente programmi gestiti, affinché possano essere tutti riciclati all'interno del processo costituito dal CLR. Con una singola applicazione in memoria, le risorse del CLR aggiungono un peso (rispetto ad altre applicazioni native) che si riduce, in termini percentuali, quando si lanciano più applicazioni che vengono ospitate all'interno dello stesso runtime.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da alka
    Esattamente.

    Un'applicazione .NET 2.0 costituita da un Form con un solo pulsante tiene 10 MB precisi.

    Ovviamente, la crescita non è esponenziale: non è che inserendo un controllo e poi un altro il programma raddoppi ogni volta.

    Molto probabilmente, la condizione ideale per il .NET Framework sarebbe quella di avere unicamente programmi gestiti, affinché possano essere tutti riciclati all'interno del processo costituito dal CLR. Con una singola applicazione in memoria, le risorse del CLR aggiungono un peso (rispetto ad altre applicazioni native) che si riduce, in termini percentuali, quando si lanciano più applicazioni che vengono ospitate all'interno dello stesso runtime.
    Scusa ma allora posso considerarmi un miracolato visto che il mio .exe pesa 92kb e dentro ci sono 3 form e diversi controlli.. ma mi sà che non parliamo della stessa cosa a questo punto

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338
    Originariamente inviato da alka
    Non puoi sicuramente invocare la Dispose su quegli oggetti che vengono utilizzati dagli elementi visuali del tuo Form, certo a meno di non rinunciare al corretto funzionamento del Form stesso.

    Per garantire la distruzione delle risorse esterne collegate ad un oggetto il prima possibile, puoi usare il costrutto using.

    codice:
    using (SomeType SomeObject = new SomeType())
    {
      SomeObject.DoSomething();
    }
    in che modo funziona il costrutto? cioè perchè dovrebbe essere + efficiente?

  8. #8
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Perche quando esce dal costrutto using l'oggetto viene distrutto richiamando in modo automatico il dispose.

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Originariamente inviato da dops
    Scusa ma allora posso considerarmi un miracolato visto che il mio .exe pesa 92kb e dentro ci sono 3 form e diversi controlli.. ma mi sà che non parliamo della stessa cosa a questo punto
    Parlo di memoria occupata in RAM, non su disco.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Originariamente inviato da cassano
    Perche quando esce dal costrutto using l'oggetto viene distrutto richiamando in modo automatico il dispose.
    Niente di più, niente di meno.

    Anzi, aggiungerei che viene garantita la sua chiamata, al contrario di ciò che avviene nel codice iniziale di esempio dove l'uso degli oggetti e la distruzione con Dispose, che si possono comunque mantenere e usare al posto di using, non sono garantite con un costrutto try...finally.

    codice:
    MyClass MyObj = new MyClass();
    try
    {
        MyObj.DoSomething();
    }
    finally
    {
        MyObj.Dispose();
    }
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.