| 

.NET C# Java Javascript Exception

2
Hi,

ich habe eine Applikation in der die Sub-Registry-Keys eines gegebenen Registry Key wie folgt ausgelesen werden:

string[] keyNames = win32RegKey.GetSubKeyNames();
foreach (string keyName in keyNames)
{
regKeyList.Add(new NetRegKey(this.Reg, this, keyName));
}


Im Konstruktur von NetRegKey wird wiederrum die win32RegKey-Variable mit einem "Microsoft.Win32.RegistryKey" Objekt befüllt. Dieser Code läuft auch recht performant, wenn ich die Applikation einfach ganz normal ausführe. Wenn ich die Applikation aber im Debugger (F5) starte dauert, das laden der ca. 6000 Registry Key unterhalb von HKCR ca. 60 Sekunden (im Gegensatz zu 1 Sekunde bei der normalen Ausführung).
Dieses Verhalten kann ich in VS2008 und VS 2012 feststellen. Ist das so, dass der VS Debugger grundsätzlich Probleme hat mit einigen Operationen? Kann ich das irgendwie beschleunigen? Gibt es da Performance-Tuning Tipps?

Gruss Dave
News:
08.07.2013
david.koenig09 173 6
1
Ich verstehe ehrlich gesagt überhaupt nicht Dein Problem! Man debugt um einen Fehler zu suchen. Da ist die Geschwindigkeit doch wohl völlig egal. Wenn nach 60 Sekunden die Daten da sind und man weiter debuggen kann um den Fehler zu finden, ist dies doch völlig ausreichend. Oder?
Xantiva100 14.07.2013
7 Antworten
3
Also, ich glaube kaum dass Dir hier jemand helfen kann, ohne dass Du etwas mehr Code postest. Was passiert beispielsweise alles im Konstruktor von NetRegKey?

Hast Du schon einmal probiert Dein Programm mit einem Profiler zu testen? Siehe hier:

Nicht kostenlos:
SpeedTracePro
ANTS Performance Profiler
JetBrains
Kostenlos:
SlimTune
Prof-It for C#

Um einige zu nennen. Damit kannst Du relativ leicht herausfinden wo Dein Flaschenhals ist.
16.07.2013
JEwen 2,7k 5
1
Mir stellt sich die Frage: Warum 6000 Registrierungskeys einlesen?
13.07.2013
Weil ich die Registry Key und deren Inhalt nach einem Wert durchsuchen will, da muss ich Sie zwangsläufig auch alle lesen...
david.koenig09 14.07.2013
0
Wonach suchst du denn genau? Vielleicht kann man dein Problem ja mit WMI o.ä. lösen?
14.07.2013
0
Hi,

also meine Problem ist erstmal, dass ich verstehen will, warum der Debugger so langsam läuft. Ich habe eine relativ komplexe Suchfunktion geschrieben die ich durchtesten will. Und das bedeutet x-mal im debug Mode da reingehen und sich anschauen ob sich die Suchfunktion so verhält wie sie soll. Und da nervt es, wenn jedesmal 60 Sekunden Wartezeit anfallen.

Was ich unglücklicherweise nicht erwähnt habe: Es scheint so zu sein, dass nicht das Laden der Registry Keys das Problem ist, sondern der Voragn der so lange dauert scheint das befüllen der Liste zu sein. Also der Befehl regKeyList.Add(new NetRegKey(this.Reg, this, keyName));

Gruss Dave
15.07.2013
david.koenig09 173 6
0
Hi,

na dass hilft mir doch eventuell weiter. Ich war ja auch mehr auf der Suche nach Ansätzen, als nach einer fertigen Lösung. Die Tools schaue ich mir mal genauer an...

Gruss Dave
16.07.2013
david.koenig09 173 6
0
Ich habe mir auch die Frage gestellt: Wie schaut die Klasse NetRegKey aus und was ist in diesem Fall "this"? Für mich schaut es so aus, als wenn hier Daten unnötigerweise redundant vorgehalten werden und man hier ansetzen sollte als direkt im ersten Schritt auf Profiler zu setzen.
17.07.2013
0
Hi,

ich habe die Ursache der Probleme gefunden. Leider hat sich daraus eine Folgefrage ergeben :-( zu der ich nun unter http://codekicker.de/fragen/Registry-Permissions-auswerten einen weiteren Eintrag gemacht habe. Dort ist auch konkret die Codestelle beschrieben, die das Phänomen verursacht.
Heruasbekommen habe ich das übrigens, indem ich meine Code mit
System.Diagnostics.Trace.Write(String.Format("<Zeit> <Beschreibung>"));
gespickt habe. Das macht so oder auf Dauer Sinn ;-)

gruss Dave
24.07.2013
david.koenig09 173 6

Stelle deine Performance-Frage jetzt!