Frage

Ich mag einig Benchmarking eines C # Prozess zu tun, aber ich will nicht Zeit wie mein Vektor verwenden - ich will die Zahl der IL Anweisungen zählen, die in einem bestimmten Methodenaufruf ausgeführt werden soll. Ist das möglich?

Bearbeiten Ich meine nicht, statische Analyse eines Verfahrens Körper - ich bin auf die tatsächliche Anzahl von Anweisungen beziehen, die ausgeführt werden - so, wenn zum Beispiel das Verfahren Körper eine Schleife, die Zählung um jedoch viele Befehle erhöht würde die Schleife bilden * die Anzahl der Male die Schleife wiederholt wird.

War es hilfreich?

Lösung

Ich glaube nicht, es möglich ist, zu tun, was Sie wollen. Dies liegt daran, die IL nur während der JIT (Just-In-Time) Zusammenstellung verwendet wird. Mit der Zeit wird die Methode, um die IL ausgeführt wurde in nativen Maschinencode übersetzt. So, während es könnte möglich sein, die Zahl der IL-Instruktionen in einer bestimmten Verfahren / Typ / Montag statisch zu zählen, gibt es kein Konzept für diese zur Laufzeit.

Sie haben nicht Ihre Absicht erklärt, die Zahl der IL Anweisungen in dem Wissen, dass interpretiert werden würde. In Anbetracht, dass es nur eine lose Korrelation zwischen der IL-Zählung einer Methode Körper und der tatsächlichen Anzahl der Maschinencodeanweisungen, sehe ich nicht, was diese Zahl zu wissen, würde erreichen (außer Ihre Neugier befriedigen).

Andere Tipps

Nun, es wird nicht einfach sein. I denken Sie könnten Instrument, um Ihre Montage post-kompilieren mit Leistungsindikator-Code, der nach Blöcken von IL ausgeführt. Zum Beispiel, wenn Sie einen Abschnitt eines Verfahrens haben, die einen int auf den Stapel geladen dann eine statische Methode ausgeführt, dass int unter optimierten Code verwenden, können Sie eine Anzahl von 2 für die int Last aufnehmen und rufen.

Auch bestehende IL / verwaltete Assembly Lesen / Schreiben von Projekten verwenden, würde dies eine ziemlich schwierige Aufgabe ziehen aus.

Natürlich sind einige Hinweise, die Sie Zähler aufgezeichnet könnten während just-in-time erhalten wegoptimiert Kompilieren zu x86 / ia64 / x64, aber das ist ein Risiko, das Sie nehmen würde, um zu versuchen, basierend auf einer abstrakten lanaguage zum Profil wie IL.

könnten Sie ICorDebug denen a verwaltete Schnittstelle. Chuck ein Bruchstelle am Anfang des Verfahrens und programmaticly Schritt durch den Code, bis es das Verfahren verlässt.

Aber ich bin nicht sicher, wie nützlich die Metrik sein wird, neigen die Menschen Zeit für diese Art von Sachen zu verwenden. Einige IL Anweisungen sind teurer als andere.

Ich verwende die -Metriken hinzufügen in zu Reflector

  

Die CodeMetrics Add-in Analysen und   berechnet mehrere Code-Qualitätsmetriken   auf Ihre Baugruppen. Diese Add-in Anwendungen   Reflector klassische Metriken zu berechnen,   wie zyklomatische Komplexität oder mehr   einfach diejenigen, wie die   Anzahl der lokalen Variablen in einer Methode.   Alle Ergebnisse können in einer Datei gespeichert werden.

Installieren Sie das Plugin. Wählen einer Baugruppe und Last Methode Metriken. Es zeigt Ihnen ein Raster mit Codegröße, McCabe-Metrik, # Unterricht, etc.

Ich weiß, dass Sie nicht die statische Zählung wollen. Allerdings zählt die statische IL pro Bogen, plus die Anzahl der Male der Bogen ausgeführt wurde zusammen gibt Ihnen die IL zählen. Sie würden jeden Bogen dafür Instrument benötigen, die einen Zähler erfordert das Einfügen.

(Ein Lichtbogen ist eine Folge von Anweisungen, die Sie in oder aus nicht springen können. Wenn Sie den ersten Befehl ausführen, werden Sie immer ausführen die letzte, etc.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top