Domino 9 und frühere Versionen > ND8: Entwicklung
Performance bei der Programmierung einsparen
bikerboy:
Hallo liebe Kollegen,
Ich haber hier seit Wochen ein Projekt laufen, dass sich im finalen Stand befindet. Es funktioniert also.
Mein Problem ist nun, dass ich wohl leider zu unperformant programmiert habe.
Ich arbeite im Hauptsächlichen Fall mit
NotesDXLExporter
NotesDXLImporter
Strings
und ein paar selbst geschriebenen kleinen Klassen.
Könnt ihr mir sagen, wo so ein paar Performance Fallen lauern, damit ich meinen Code optimieren kann ?
Felix Ziegler:
Hallo Robert,
ich denke dieser Link wird dir weiterhelfen können:
http://www.jamiemagee.com/jm/jamie.nsf/downloads/JMAE-7XULMY
Wobei natürlich DXLImporter/-Exporter nicht zu den schnellsten Klassen im Notes Bereich zählen ...
Viele Grüße
Felix
bikerboy:
So habe mal das PDF überpflogen, danke schon mal aber die bösen Fehler habe ich nicht gemacht.
Ich die die exporter und die importer sind nicht schuld.
Laut Profiling ergebnis lasse ich extrem viel zeit beim GetItemValue. Leider werden meine eignen Klassen nicht mit "profilisiert"
pram:
die verdächtigen Stellen kannst du einfach mit
--- Code: ---Dim start
start = Getthreadinfo(6) ' LSI_THREAD_TICKS
.... problematic code
print "Code XXX took" , Getthreadinfo(6) - start, "ms"
--- Ende Code ---
stoppen. LSI_THREAD_TICKS hat eine Auflösung von ~16ms. Falls dir das nicht reicht um die Problemstellen aufzuzeigen kannst du
--- Code: ---Declare Private Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
Declare Private Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean
--- Ende Code ---
verwenden. Dieser hat eine wesentlich höhere Auflösung.
Wir haben uns hierfür eine kleine Klasse (profiler) gebaut, welche im Konstruktor und Destruktor die Zeit misst und dann protokolliert wie lang das Objekt gelebt hat.
Man kann dann mit einem Einzeiler die Zeit stoppen, die man in einer Methode braucht:
--- Code: ---public function anyFunction()
dim p as new Profiler("infotext") ' wenn die GarbageCollection das Objekt löscht, muss die Zeit ausgegeben werden.
... rest of code
end function
--- Ende Code ---
Wenn du dann deine problematischen Methoden gefunden hast, dann kannst ja mal Codeausschnitte posten.
Gruß
Roland
DerAndre:
Hmmm, Profiling. Schönes Thema.
Habe ich auch gerade an den Füssen, da wir hier einige Dinge haben die extrem Lange brauchen.
Einen Übeltäter habe ich schon, lässt sich wohl leider ohne weiteres nicht ändern. Eine engebettete Ansicht auf eine andere DB. Böööööse Falle... Nun gut. mal schauen, ob man das mit anderen Mitteln ändern kann.
Aber diese Profilingklasse hört sich gut an.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln