Ich habe noch nie ein Profiling durchgeführt. Gestern habe ich eine ProfilingTimer-Klasse mit einem statischen Zeitplan (eine Map <std :: string, long long>) für die Zeitspeicherung programmiert.
Der Konstruktor speichert das Start-Tick, und der Destruktor berechnet die verstrichene Zeit und fügt sie der Karte hinzu:
ProfilingTimer::ProfilingTimer(std::string name)
: mLocalName(name)
{
sNestedName += mLocalName;
sNestedName += " > ";
if(sTimetable.find(sNestedName) == sTimetable.end())
sTimetable[sNestedName] = 0;
mStartTick = Platform::GetTimerTicks();
}
ProfilingTimer::~ProfilingTimer()
{
long long totalTicks = Platform::GetTimerTicks() - mStartTick;
sTimetable[sNestedName] += totalTicks;
sNestedName.erase(sNestedName.length() - mLocalName.length() - 3);
}
In jeder Funktion (oder {Block}), die ich profilieren möchte, muss ich Folgendes hinzufügen:
ProfilingTimer _ProfilingTimer("identifier");
Das Hinzufügen dieser Zeile in allen Funktionen, die ich profilieren möchte, ist etwas umständlich, da ich raten muss, welche Funktionen viel Zeit in Anspruch nehmen. Aber es funktioniert gut und die Druckfunktion zeigt den Zeitaufwand in% an.
(Arbeitet noch jemand mit einem ähnlichen "hausgemachten Profiling"? Oder ist es einfach nur dumm? Aber es macht Spaß! Hat jemand Verbesserungsvorschläge?
Gibt es eine Art automatisches Hinzufügen einer Zeile zu allen Funktionen?)