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);
}