Last active
February 21, 2017 17:04
-
-
Save Aimeast/6752695 to your computer and use it in GitHub Desktop.
Test C# inlining method (framework 4.5)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Following code for test an method will be inlined by JIT or not | |
* Tested on Framework 4.5, Win8 x64 | |
* | |
* http://blogs.msdn.com/b/ericgu/archive/2004/01/29/64717.aspx | |
* http://blogs.microsoft.co.il/blogs/sasha/archive/2012/01/20/aggressive-inlining-in-the-clr-4-5-jit.aspx | |
*/ | |
using System; | |
using System.Diagnostics; | |
using System.Runtime.CompilerServices; | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
Console.WriteLine(Fa(1)); // Main | |
Console.WriteLine(Fb(1)); // Fb | |
Console.WriteLine(Fc(1)); // Main | |
Console.WriteLine(Fd(1)); // Main | |
Console.WriteLine(Fe(1)); // Fe if Platform target is x86, Main if x64 | |
Console.WriteLine(Ff(1)); // Ff | |
} | |
[MethodImpl(MethodImplOptions.AggressiveInlining)] | |
static string Fa(int a) | |
{ | |
var s = a.ToString(); | |
var b = uint.Parse(s); | |
var c = (a + b) / 2; | |
var ss = c.ToString(); | |
var d = int.Parse(ss); | |
return new StackFrame().GetMethod().Name; | |
} | |
static string Fb(int a) | |
{ | |
var s = a.ToString(); | |
var b = uint.Parse(s); | |
var c = (a + b) / 2; | |
var ss = c.ToString(); | |
var d = int.Parse(ss); | |
return new StackFrame().GetMethod().Name; | |
} | |
[MethodImpl(MethodImplOptions.AggressiveInlining)] | |
static string Fc(int a) | |
{ | |
return new StackFrame().GetMethod().Name; | |
} | |
static string Fd(int a) | |
{ | |
return new StackFrame().GetMethod().Name; | |
} | |
[MethodImpl(MethodImplOptions.AggressiveInlining)] | |
static string Fe(int a) | |
{ | |
a += 1; | |
return new StackFrame().GetMethod().Name; | |
} | |
static string Ff(int a) | |
{ | |
a += 1; | |
return new StackFrame().GetMethod().Name; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment