Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 03.08.2004, 14:13 Titel: |
|
|
Nette Idee. Aber das hat leider globale Variablen...und der Code ist nicht sauber/schön/klar geschrieben. Werd mir wohl da selber ne Klasse proggen. Ist ja nciht so schwer jetzt mit STD map & Co. Aber sowas ist schon sehr nützlich um den "störenden Faktor" zu ermitteln, der einem viele schöne Frames kostet... _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 03.08.2004, 15:21 Titel: |
|
|
Man kann sich das Ganze ein wenig erleichtern indem man eine Profile-Klasse erstellt und PROFILE_START bzw END in ihrem Con bzw Destructor aufruft.
Dann legt man in einer Funktion, die man Profilen will einfach eine lokale Instanz der Profile-Klasse an und übergibt dem Constructor den String.
Am Ende der Funktion wird die lokale Instanz automatisch durch aufruf des Destructors zerstört (und es wird automatisch PROFILE_END aufgerufen). Zudem umgeht man damit das Problem bei PROFILE_STOP einen falschen String zu übergeben. _________________ Kochen ist ein NP-schweres Optimierungsproblem. |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 03.08.2004, 15:24 Titel: |
|
|
Misst du dann nicht einfach nur die Lebensdauer der Familienmitglieder der Klasse ? Soviel bringt das nun auch wieder nicht. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 03.08.2004, 15:34 Titel: |
|
|
Die Instanz der Klasse "lebt" solange bis die Funktion beendet ist.
Du erstellst die Instanz am Anfang der funktion, dann wird die zu Profilende funktion durchlaufen und an ihrem Ende wird die Instanz zerstört.
Der Constructor loggt die Start- und der Destructor die Endzeit.
Man macht im prinzip das gleiche wie mit den Makros, nur benötigt man weniger code und PROFILE_END braucht man garnicht mehr zu schreiben.
EDIT:
Bsp.:
Code: |
void ZuProfilendeFunktion()
{
ProfileSample LokalesSample("bla"); // Constructor wird aufgerufen und startzeit der funktion geloggt
(LokalesSample.~ProfileSample()) // Am Ende der funktion wird der Destructor aufgerufen welcher die Endzeit loggt
}
|
_________________ Kochen ist ein NP-schweres Optimierungsproblem.
Zuletzt bearbeitet von Kampfhund am 03.08.2004, 15:36, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 03.08.2004, 15:36 Titel: |
|
|
Ach du meinst du erstellst eine ProfilerKlasse:
void FunktionFoo()
{
CProfiler profiler("FunktionFoo");
...
} _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 03.08.2004, 15:37 Titel: |
|
|
Exakt
EDIT: Nennt sich übrigens RAII. _________________ Kochen ist ein NP-schweres Optimierungsproblem. |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 03.08.2004, 19:01 Titel: |
|
|
Aber wie du das machen willst, ist es nicht möglich alle Ergebnisse am Ende des Programm anzuzeigen oder erst beim Beenden des Programm in eine Datei abzuspeichern, oder doch? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 03.08.2004, 19:42 Titel: |
|
|
Doch, wenn ProfileSample zB als Member einen statischen Pointer auf eine Profiler Klasse hat an die die Ergebnisse geschickt werden (geht sicher auch anders). Die Profiler-Klasse kann dann die Ergebnisse in eine Statistik einbauen. _________________ Kochen ist ein NP-schweres Optimierungsproblem. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 03.08.2004, 20:06 Titel: |
|
|
Verstehe ich das richtig, dass das einfach die Zeitspanne misst, die ein Codeschnipsel braucht, um ausgeführt zu werden? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 03.08.2004, 20:18 Titel: |
|
|
Ja, damit kann man zB Zeitverschwendende Stellen schnell aufspüren und gezielt optimieren. _________________ Kochen ist ein NP-schweres Optimierungsproblem. |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 03.08.2004, 21:03 Titel: |
|
|
Das ist aber etwas unpraktisch, dass dann wieder an eine übergeordnete Klasse weiterzuleiten oder meinst du dass jede Instanz dieser Klasse die Statistik gemeinsam teilt? Was ist dann bei Multithreading? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 03.08.2004, 21:09 Titel: |
|
|
Zitat: |
...oder meinst du dass jede Instanz dieser Klasse die Statistik gemeinsam teilt?
|
Ja, deswegen der statische Pointer.
Mit Multithreading habe ich mich noch nicht wirklich beschäftigt.
Ich denke aber, dass dies leicht einzubauen ist.
Dazu müsste man wohl die Profiler-Klasse synchronisieren bzw die funktion, die die Ergebnisse in der Profiler-Klasse speichert.... oder so ähnlich _________________ Kochen ist ein NP-schweres Optimierungsproblem. |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 03.08.2004, 21:12 Titel: |
|
|
Cool wäre sowas:
Profile(Funktion(param1,param2);
Dass sich die Funktion den Funktionspointer schnappt aufruft und profiled, irgendwie auch den Namen der Funktion ermitteln kann und in die Statistik einträgt...Ich bezweifle aber, dass man den Variablennamen in ein String umwandeln kann, oder geht das? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 03.08.2004, 21:23 Titel: |
|
|
Zitat: |
Profile(Funktion(param1,param2);
|
Da gibt es denke ich einige Probleme:
Was ist, wenn der Rückgabewert der Funktion gebraucht wird?
Man könnte es aber so lösen, wenn man den Quellcode der Funktion nicht verändern kann:
Code: |
...
{ // neuen "scope" (so hieß das IIRC ) anlegen
ProfileSample("FunktionBla");
return_val = FunktionBla();
}
...
|
Zitat: |
Dass sich die Funktion den Funktionspointer schnappt aufruft und profiled, irgendwie auch den Namen der Funktion ermitteln kann und in die Statistik einträgt...Ich bezweifle aber, dass man den Variablennamen in ein String umwandeln kann, oder geht das?
|
Willst du, dass der Funktionsname mit Parameter automatisch eingetragen wird?
hm, beim compilieren gehen eigentlich alle Symbole verloren (Funktionsnamen, Variablennamen, ... ), nur bei Dlls bleiben reste in der export-Tabelle. Man könnte höchstens den Funktions-Namen irgendwie per Makro automatisch dem Constructor übergeben. Aber ich glaube so ein Makro gibt es nicht (ich kenne nur __FILE__ und __LINE__). _________________ Kochen ist ein NP-schweres Optimierungsproblem. |
|
Nach oben |
|
|
|