Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    156

    Errore "Memoria Esaurita"

    Buona sera,
    mi capita spesso,dopo aver fatto varie modifiche al listato o usando molto il programma sotto vb6 (non ho ancora creato l'eseguibile)che il tutto si rallenta e poi compare il messaggio "Memoria Esaurita"
    Mi sapete dare qualche suggerimento?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    I motivi possono essere molteplici e concomitanti, per esperienza personale te ne posso suggerire tre, dopo l'uso:
    - hai chiuso le connessioni al DB ed eliminato i rs ?
    - hai disattivato gli oggetti istanziati ?
    - hai diverse Forms attive, magari con grafica ?
    LM

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    156
    i db e i rs li chiudo sempre a finen del ciclo .
    Scusa la mia poca conoscenza(tradotto :ignoranza) cosa sono gli oggetti istanziali?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    156
    Cosa intendi per eliminare i recordset.Io normalmente dopo il ciclo chiudo il recordset e il db.Non basta fare cosi?
    Grazie
    ciao

  5. #5
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    oggetto :


    DataSet DS = new DataSet();// questo è un oggetto.

    MainForm MF = new MainForn();//questo è un oggetto.

    Form Form = new Form ();//questo è un oggetto.
    ecc. ecc.

    nella programmazione ad oggetti è praticamente tutto un oggetto


  6. #6
    Un oggetto istanziato è un oggetto che è stato creato (ad esempio con new o con CreateObject):
    codice:
    'dichiarazione del puntatore all'oggetto
    Dim x as CTest
    'istanziazione dell'oggetto:
    '-allocazione memoria per l'oggetto
    '-incremento del contatore interno di istanze dell'oggetto
    '-esecuzione Class_Initialize
    '-(e magari qualcos'altro)
    '-assegnazione di un puntatore all'istanza dell'oggetto a "x"
    Set x = new CPerson
    ...
    'Distruzione dell'oggetto
    '-impostazione del puntatore x a "nothing" (il puntatore non punta più a niente)
    '-deincremento del contatore interno di istanze dell'oggetto
    'se il contatore interno di istanze raggiunge lo 0:
    '-esecuzione di Class_Terminate
    '-deallocazione della memoria per l'oggetto
    Set x = nothing
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    scusa ho scritto in C# , ma il concetto non cambia

  8. #8
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Ciao multijet,
    oltre ai consigli che ti hanno già dato gli amici del forum (tra cui quelli relativi al DB in particolare
    'Chiude e cancella la connessione:
    ConSR.Close
    Set ConSR = Nothing
    'Chiude e cancella il recordSet:
    RSTctr.Close
    Set RSTctr = Nothing
    ), se hai diversi forms caricati contemporaneamente in memoria perchè tra di loro collegati, e se i predetti forms hanno un numero cospicuo di controlli, ciò potrebbe creare il progressivo assorbimento della memoria disponibile.
    Se ti trovi in questa situazione devi cambiare trategia, ovvero devi puntare sull'uso di variabili pubbliche (dichiarate in modulo/li bas) che siano visibili nell'intero progetto. Ciò ti consente di chiudere il form una volta che ha svolto la sua funzione mediante l'istruzione:
    Unload FrmTuo
    Set FrmTuo = Nothing
    caricare il nuovo form che preleverà i necessari elementi/dati per i suoi controlli dalle predette variabili pubbliche. In questo modo riduci drasticamente l'uso della memoria, in quanto viene meno tutta la parte grafica del form che hai scaricato.
    Bhe, poi, magari se ci fornisci maggiori dettagli sul tuo programma potremmo aiutarti in modo più mirato.
    LM

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    156
    Ho fatto un programma che attraverso la porta parallela comanda un plot con 3 motori passo passo.Attraverso una formula trigonometrica calcolo i passi e quindi gli spostamenti da inviare alla lpt e quindi ai motori.Ad ogni spostamento leggo da un trasduttore il valore e lo inserisco in una tabella di access.i campionamenti sono 173.
    A questo punto eseguo una serie di calcoli sui dati e i risultati li scrivo sempre nel database.
    Gli stessi valori poi vengono prelevati e inviati ad uno o piu' grafici e datagrid(2 al massimo) per visualizzare la differenza dei valori.
    Quindi faccio un uso intenso di lettura recordset .
    Ogni volta quindi apro la connessione al db e al recordset e dopo aver caricato i dati la chiudo.Ma non la elimino.
    Provero' ora a fare come suggerito
    Uso connessioni adodb

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.