Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [vb2008] lol, 25 mega contro 5 scarsi

    ho "rifatto" ex novo un programmino che avevo già in VB6.0, con lo stesso fine e ovviamente, a parte le diverse scorciatoie di codice che VB2008 offre (es. la sys tray icon), più o meno le stesse routines

    i programmi, tramite un timer, effettuano una serie di controlli

    il programma VB2008 compilato è di 95 Kb, in VB6.0 115 Kb.

    memoria occupata: in VB6.0: 4.740 Kb, in VB2008: fino a 25.000 Kb !! più di Excel!!!!! alla faccia della ottimizzazione

    tra l' altro dico fino a 25.000 Kb perchè, mentre il programma VB6.0 a parità di condizioni (esce subito dalla routine di controllo perché non sono rispettate le condizioni minime per dover controllare) rimane fisso a 4.740 Kb, quello in VB2008 cresce ogni secondo di circa 150 Kb... cresce cresce cresce e quando arriva a 25.000 Kb torna a 21.000 Kb, per poi ricrescere

    inspiegabile!!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Nulla e' inspiegabile.

    E tutti i numeri che hai fornito hanno poco senso senza "esaminare attentamente" il codice scritto in VB6 e quello in VB.NET.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    mentre invece, a tuo parere, i 20 e passa mega contro i 5 di occupazione della memoria, a parità di routines e di variabili dichiarate, sono "normali" passando da VB6.0 a VB2008?

  4. #4
    dunque, come si stava dicendo:

    due progettini piccoli piccoli uguali uguali, un form con un timer e un pulsante per chiudere:

    VB6.0:

    Private Sub Command1_Click()
    Unload Me
    End
    End Sub

    Private Sub Timer1_Timer()
    Static s As Boolean
    s = True
    End Sub

    VB2008:

    Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Application.Exit()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Static s As Boolean
    s = True
    End Sub
    End Class

    spazio occupato in memoria da VB6.0: 1.560 KB
    spazio occupato in memoria da VB2008: 9.876 Kb !!!! poco meno della metà di Excel

    come si diceva: alla faccia della ottimizzazione del codice
    una vera cagata, se mi è consentito, oserei quasi dire una vergogna: è vero che con le dimensioni delle RAM attuali non è nulla, ma è il principio... che un eseguibile da 100Kb occupi più memoria di Word e Excel è assurdo.

    devo però dire che in questo caso lo spazio occupato in memoria non varia: nel programma di cui parlavo prima, quello che aumenta la memoria occupata ad ogni ciclo del timer, l' unico codice che viene letto nella routine del timer è un controllo di files aperto:

    Try
    TestAA = Process.GetProcessesByName("XYZ")
    Select Case TestAA.Length
    Case 0 : exit sub 'e qui esce perché il file è XYZ chiuso

    volete dire che ogni volta che testa occupa sempre più memoria?? e perché mai??

  5. #5
    aggiornamento: ebbene sì, la routine che ad ogni ciclo del timer incrementa la memoria occupata di quasi 200Kb è proprio quella:

    TestAA = Process.GetProcessesByName(xxx)

    ho provato a bypassarla con un exit sub e la memoria si è stabilizzata

    una seconda routine successiva che controlla se il programma, se aperto, è in primo piano:

    If GetForegroundWindow() = FindWindow(vbNullString, "xxx")

    incrementa invece ad ogni passaggio del timer la memoria occupata di una ventina di bytes

    entrambe le cose in VB6.0 non succedono... mah

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da eziogsv
    spazio occupato in memoria da VB6.0: 1.560 KB
    spazio occupato in memoria da VB2008: 9.876 Kb !!!! poco meno della metà di Excel
    Se l'hai letto nel Task Manager forse non sai che quella NON e' l'occupazione di RAM del processo ma il cosiddetto

    Working Set

    del processo. Potrai renderti conto che non c'entra con la RAM occupata (come pensi tu) se riduci ad icona il tuo programma (vedrai quanto cala quel valore) e quando lo riporti visibile.

    Quindi, prima di esprimere giudizi (e anche in maniera un po' troppo colorita per un forum pubblico)

    come si diceva: alla faccia della ottimizzazione del codice
    una vera cagata, se mi è consentito, oserei quasi dire una vergogna:
    ti consiglierei di documentarti e comprendere cosa stai osservando.

    volete dire che ogni volta che testa occupa sempre più memoria?? e perché mai??
    La gestione della memoria per un processo .NET e' molto complessa e probabilmente va al di la' delle tue attuali conoscenze (credimi).

    Studia un po' di mesi come funziona il "garbage collector" di .NET e di cosa significa "riservare memoria" e poi ne riparliamo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463

    Moderazione

    Direi che questa discussione non ha molto senso in generale qui, visto che non evidenzia un problema specifico, in primo luogo.

    In secondo luogo, come già evidenziato da Oregon, si fanno assuzioni sulla memoria occupata senza nemmeno tenere conto delle differenze tra due elementi diversi, VB6 e VB.NET, che sono profondamente diversi dal punto di vista del linguaggio (il secondo è decisamente più complesso), del compilatore, dell'ambiente in cui girano, dei servizi offerti dalla macchina virtuale che ospita i programmi in esecuzione, dai criteri di sicurezza che applicano (nulli nel primo caso), delle prerogative di funzionamento del CLR.

    Insomma, è una comparazione impari dove si considera un solo fattore (l'occupazione di memoria) senza tenere in considerazione tutto il resto.

    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.