2010-12-29 7 views
4

Wie kann das [MethodImpl(MethodImplOptions.NoInlining)] Methodenattribut in C# die Leistung beim Arbeiten mit Arrays beeinflussen?Wie das Methodenattribut [MethodImpl (MethodImplOptions.NoInlining)] in C# die Leistung beim Arbeiten mit Arrays beeinflussen kann?

Ich habe eine Methode, die über int[][] - gezackte Array iteriert. Mit oder ohne dieses Attribut hat die Leistungsmessung den gleichen Effekt.

Sollte Inlining eine Verbesserung bei der Arbeit mit gezackten Arrays geben?

Antwort

4

ein zweidimensionales Array iterieren normalerweise teuer genug sein würde, die Kosten für den einzelnen Methodenaufruf zu verstecken. Und es macht wahrscheinlich, dass die Methode auch ohne das Attribut nicht inline wird, nur weil es zu viel Maschinencode gibt.

Aber schauen Sie mal. Extras + Optionen, Debugging, Allgemein, deaktivieren Sie "JIT-Optimierung beim Laden des Moduls unterdrücken". Wählen Sie den Release-Build. Legen Sie einen Haltepunkt für den Methodenaufruf fest und führen Sie ihn aus. Klicken Sie mit der rechten Maustaste auf den Quellcode, und klicken Sie auf Gehe zu Disassembly, wenn es bricht. Wenn Sie eine Anrufanweisung sehen, wurde sie nicht inline angezeigt. Möglicherweise sehen Sie vor dem Aufruf einen Maschinencode, wenn die Methode Argumente annimmt.

+0

In MSVS2010 ist es * "Zur Demontage gehen" *, nicht Assembly. +1 BTW! – Nawaz

2

Es ist wahrscheinlich, dass Ihre Methode nicht inline ist, ob Sie das Attribut haben oder nicht - der JIT hat einige Einschränkungen (nicht alle Methoden können inline sein - dh solche mit struct-Argumenten), und einige Heuristiken (die meisten Methoden sind nicht inline) Es gibt mehrere Heuristiken, die auf der Verwendung des Steuerflusses, der Bytecode-Befehlszählung usw. basieren.

Dies ist eine nützliche Zusammenfassung der Regeln: http://blogs.msdn.com/b/davidnotario/archive/2004/11/01/250398.aspx

Verwandte Themen