Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di Igor70
    Registrato dal
    Aug 2002
    Messaggi
    131

    [C#] Ricorsiva su registry e prestazioni

    Salve,
    sto tentando i primi passi in .NET e C# e come test ho scelto di realizzare una specie di Regedit tanto per familiarizzare un po con i nuovi concetti e la sintassi.

    Ho quindi fatto una funzione ricorsiva che riempie una TreeView con le chiavi di registro.

    Funziona perfettamente ma a livello di prestazioni non ci siamo proprio

    ho provato a spargere un po di Application.DoEvents (); ma la risposta fa + o -

    Credo proprio che una differenza di prestazioni cosi evidente fra il mio codice e il vero Regetit denoti un chiaro errore concettuale, ma quale :master: :master:

    Forse il fatto che Regedit quando lo apro si ricorda i rami aperti in precedenza significa qualcosa?

    Qui c'è il codice:

    private void frmRegistryBrowser_Load(object sender, System.EventArgs e)
    {

    TreeNode RootNode = new TreeNode("Risorse del computer");
    RootNode.ImageIndex = 0;
    trv.Nodes.Add (RootNode);
    trv.Refresh();
    loadRegistryKeys(RootNode);
    }

    private void loadRegistryKeys(TreeNode RootNode)
    {
    RegistryKey OurKey = Registry.ClassesRoot;
    makeTreeRootNode(RootNode, OurKey );
    OurKey = Registry.CurrentUser;
    Application.DoEvents ();
    makeTreeRootNode(RootNode, OurKey );
    // ecc.ecc...
    }

    private void getSubKeys(TreeNode subNode, RegistryKey SubKey)
    {
    trv.Refresh();
    Application.DoEvents ();

    foreach(string sub in SubKey.GetSubKeyNames() )
    {
    TreeNode NewSubNode = new TreeNode(sub);
    NewSubNode.ImageIndex =1;
    NewSubNode.SelectedImageIndex =2;
    subNode.Nodes.Add(NewSubNode);

    try
    {
    RegistryKey localKey = SubKey.OpenSubKey(sub,true);

    if (localKey.SubKeyCount > 0)
    {
    getSubKeys(NewSubNode,localKey);
    }
    }
    catch(Exception e)
    {
    Console.WriteLine (e.ToString ());
    }
    }
    }

    private void makeTreeRootNode(TreeNode RootNode, RegistryKey RootKey)
    {
    TreeNode KeyRootNode = new TreeNode(RootKey.Name);
    KeyRootNode.ImageIndex = 1;
    KeyRootNode.SelectedImageIndex=2;
    RootNode.Nodes.Add (KeyRootNode);
    getSubKeys(KeyRootNode, RootKey);
    }

  2. #2
    ciao, per la piattaforma .NET (quindi anche C#)
    abbiamo una sezione (subforum) apposita. Sposto la discussione là.
    ...Terrible warlords, good warlords, and an english song

  3. #3
    Utente di HTML.it L'avatar di Igor70
    Registrato dal
    Aug 2002
    Messaggi
    131
    Originariamente inviato da Johnny_Depp
    ciao, per la piattaforma .NET (quindi anche C#)
    abbiamo una sezione (subforum) apposita. Sposto la discussione là.
    Chiedo scusa, avevo mal'interpretato la descrizione della sezione, colpa mia

  4. #4
    Utente di HTML.it L'avatar di Igor70
    Registrato dal
    Aug 2002
    Messaggi
    131
    Originariamente inviato da Johnny_Depp
    ciao, per la piattaforma .NET (quindi anche C#)
    abbiamo una sezione (subforum) apposita. Sposto la discussione là.
    Hei Johnny_Depp, ma 6 sicuro che mi ha spostato nel posto giusto

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

    Re: [C#] Ricorsiva su registry e prestazioni

    Originariamente inviato da Igor70
    Funziona perfettamente ma a livello di prestazioni non ci siamo proprio
    In che senso? Spiegati meglio... qual è il problema che riscontri?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  6. #6
    Utente di HTML.it L'avatar di Igor70
    Registrato dal
    Aug 2002
    Messaggi
    131

    Re: Re: [C#] Ricorsiva su registry e prestazioni

    Originariamente inviato da alka
    In che senso? Spiegati meglio... qual è il problema che riscontri?
    Se per il primo il problema è il tempo che impiega a caricare l'albero rispetto a quello che impiega il Regedit di windows.
    un rapporto tipo 10 a 1, come se io caricassi tutto in un botto e lui invece solo i primi due livelli per esempio, possibile?

    Magari lui carica il primo livello, controlla se ci sono figli e mette il +, poi sull'onclick del nodo carica il figlio e via dicendo, senza ricorsiva.

    E con il DoEvents (); nel ciclo non cambia assolutamente nulla, la Form è inchiodata bianca fino che non ha finito il ciclo.

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

    Re: Re: Re: [C#] Ricorsiva su registry e prestazioni

    Originariamente inviato da Igor70
    Se per il primo il problema è il tempo che impiega a caricare l'albero rispetto a quello che impiega il Regedit di windows.
    un rapporto tipo 10 a 1
    E' normale, perchè il Regedit non carica l'intero albero come fa la tua applicazione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  8. #8
    Utente di HTML.it L'avatar di Igor70
    Registrato dal
    Aug 2002
    Messaggi
    131
    Ah fico volevo dire

    Allora fa piu +o- come ipotizzato nel precedente post o ancora in altro modo?

  9. #9
    se regedit dovesse mettere in memoria tutte le chiavi e i relativi valori ci metterebbe 1000 anni fista la quantità industriale di porcheria presente nel registro.

    allora utilizza l'escamotage da te evidenziato nel primo post cioè si salva (sempre nel registro) l'ultima chiave di registro consultata ed infatti quando apri regedit vedi che se espandi 2 o + chiavi la volta successiva ti fa vedere solo l'ultima che hai aperto.
    Inoltre quando clicchi su una chiave, apre solo il primo ramo della chiave in qestione tant'è che mette i '+' di espanzione della chiave anche dove non dovrebbe metterli.

    hai mai provato a fare una ricerca di nel registro di sistema? ci mette una vita e il tempo che ci mette la tua applicazione a caricare e lo stesso di quando si effettua una ricerca.
    *** Rachele TI AMO DA MORIRE!!! ***

  10. #10
    Utente di HTML.it L'avatar di Igor70
    Registrato dal
    Aug 2002
    Messaggi
    131
    [B]... tant'è che mette i '+' di espanzione della chiave anche dove non dovrebbe metterli.
    Tutto il resto mi quadrea alla perfezione ma questa forse l'ho mal'interpretata.

    Secondo me carica il livello corrente + il sottolivello, se lo trova lo ggiunge all Node e quindi c'è il +, altrimenti il + non c'è, giusto?

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 © 2026 vBulletin Solutions, Inc. All rights reserved.