Timing-Ziel-C-Code

8

Ich möchte meiner Objective-C-Anwendung einen automatischen Leistungstest hinzufügen. (Dies ist ein Spiel, so dass ich die aktuelle Leistung der wichtigsten Teile der Engine sehen möchte, indem ich einfach eine Reihe von Tests durchführe.) Dazu möchte ich eine Timing-Unterstützungsroutine schreiben, etwa so:

%Vor%

Das Problem ist, dass mich Millisekunden interessieren und ich fürchte, dass das Aufrufen von performSelector im Benchmarking-Code die Ergebnisse ziemlich verzerren würde. Wie würdest du das umgehen? Soll ich nach objc_msgSend gehen?

    
zoul 23.06.2009, 06:15
quelle

1 Antwort

12

Verwenden Sie methodForSelector: , was einen Funktionszeiger auf die tatsächliche Implementierung zurückgibt:

%Vor%

Beachten Sie, dass diese Strategie nützlich ist, um die tatsächliche Laufzeit einer Methode zu messen, aber wenn Sie sie mit der standardmäßigen Objective-C-Message-Passing-Syntax aufrufen, dann ist es möglicherweise genauso wichtig, die Nachricht einzubeziehen. Überlauf in Ihren Messungen.

Beachten Sie außerdem, dass das Ergebnis von methodForSelector: in einen Funktionszeiger mit den entsprechenden Parametern umgewandelt werden muss, wenn die Methode tatsächlich andere Parameter akzeptiert, um eine unerwartete Konvertierung von Floats in Doubles usw. zu vermeiden. Siehe NSObject-Klassenreferenz für weitere Informationen und Beispiele.

    
BJ Homer 23.06.2009, 06:33
quelle