2016-02-03 20 views
5

Muss ich wirklich darauf achten, wo es möglich ist, .s Anweisungen auszugeben? Oder wird es nur die Größe beeinflussen, aber die tatsächliche Leistung wird die gleiche sein? Die generierte DLL wird auch auf AOT Plattformen verwendet. Wird die resultierende AOT-ed DLL für IL mit .s und ohne? Identisch sein?Haben kurze Anweisungen eine bessere Leistung?

ich meine br.s, ldloca.s, etc ..

+1

Bitte teilen Sie einen Code? Es ist nicht klar, was Sie mit '.s'-Anweisungen meinen. – HimBromBeere

+4

@HimBromBeere - z. [beq] (https://msdn.microsoft.com/de-de/library/system.reflection.emit.opcodes.beq (v = vs.110) .aspx) vs [beq.s] (https: // msdn.microsoft.com/en-us/library/system.reflection.emit.opcodes.beq_s(v=vs.110).aspx) –

+0

Ich glaube, dass das Suffix .s nur eine Komprimierung der IL erlaubt, dh die Zwischencode Dies kann möglicherweise bei Download-Zeiten, z.B. in Web-Lösungen. Ich glaube nicht, dass es Auswirkungen auf den gerenderten Maschinencode hat. –

Antwort

1

Es hängt davon ab. Der Hauptzweck von .s (und literal-containing Opcodes wie ldc.i4.1) sind nur, um die Größe des Codes zu verringern, und der Vorteil der Verringerung der Größe einer Methode besteht darin, die Methode beim Generieren von nativem Code von CIL von zu ermöglichen die Aufrufmethode (das Limit für x86-Jitter ist 32 Bytes von IL). In diesem Fall können kurze Anweisungen die Leistung der Anwendung erhöhen, wenn sie in einer Inline-Kandidatenmethode verwendet werden.

Andernfalls, da die CIL nicht ausgeführt wird, sollte der Maschinencode, der sowohl von kurzen als auch von normalen Opcodes erzeugt wird, der gleiche (und wenn möglich auch optimierte) native Code sein.

+1

Die Größe der MSIL hat nichts damit zu tun, ob eine Methode inline ist. Nur die Größe des Maschinencodes beeinflusst dies. –

+0

Wie die Größe einer Methode in Bytes zu verringern, macht es möglich, die Methode zu inline? Ich dachte, es könnte von IL-Anweisungen abhängen ** zählen **, aber nicht die Größe. – Vlad

+1

@HansPassant Nach [diesem] (http://blogs.msdn.com/b/davidnotario/archive/2004/11/01/250398.aspx) Artikel, "* Größe der Inlinee ist auf 32 Bytes von IL beschränkt * ". Es stimmt, es ist JITter-abhängig, aber ich habe mindestens drei Artikel gesehen, die diese Einschränkung erwähnen. Wie kann sich die Größe des Maschinencodes auch darauf auswirken, ob der Maschinencode für die Inline-Methode und die Nicht-Inlining-Methode aufgrund von Optimierungen in Bezug auf ihre Parameter abweichen kann? – IllidanS4