Skip to content

Instantly share code, notes, and snippets.

@jkotas
Created June 8, 2026 06:37
Show Gist options
  • Select an option

  • Save jkotas/a03027f8569ea5496716c44a6df03eb3 to your computer and use it in GitHub Desktop.

Select an option

Save jkotas/a03027f8569ea5496716c44a6df03eb3 to your computer and use it in GitHub Desktop.
Lambda
Console.WriteLine("using System.Diagnostics;");
Console.WriteLine("using System.Runtime.CompilerServices;");
Console.WriteLine("using InlineIL;");
Console.WriteLine("#pragma warning disable InlineIL0100");
int count = 10000;
Console.WriteLine("Stopwatch sw = new();");
Console.WriteLine("sw.Start();");
for (int i = 0; i < count; i++)
{
Console.WriteLine($"F{i}();");
}
Console.WriteLine("Console.WriteLine(sw.ElapsedMilliseconds);");
#if BASELINE
// 463ms, 1,641,984
for (int i = 0; i < count; i++)
{
Console.WriteLine("[MethodImpl(MethodImplOptions.NoInlining)]");
Console.WriteLine($"static Func<int> F{i}() => () => {i};");
}
#endif
#if CCTOR_INSTANCE
// 1154ms, 1,890,304
for (int i = 0; i < count; i++)
{
Console.WriteLine("[MethodImpl(MethodImplOptions.NoInlining)]");
Console.WriteLine($"static Func<int> F{i}() => D{i}.Instance;");
}
for (int i = 0; i < count; i++)
{
Console.WriteLine($"static class D{i} {{ public readonly static Func<int> Instance = new Func<int>(Impl.Instance.M{i}); }}");
}
Console.WriteLine("class Impl { public readonly static Impl Instance = new Impl();");
for (int i = 0; i < count; i++)
{
Console.WriteLine($"public int M{i}() => {i};");
}
Console.WriteLine("}");
#endif
#if CCTOR_SHUFFLE
// 836ms, 1,740,800
for (int i = 0; i < count; i++)
{
Console.WriteLine("[MethodImpl(MethodImplOptions.NoInlining)]");
Console.WriteLine($"static Func<int> F{i}() => D{i}.Instance;");
}
for (int i = 0; i < count; i++)
{
Console.WriteLine($"static class D{i} {{ public readonly static Func<int> Instance = new Func<int>(M); public static int M() => {i}; }}");
}
#endif
#if true // CCTOR_INTRINSIC
// 283ms, 1,201,152
for (int i = 0; i < count; i++)
{
Console.WriteLine("[MethodImpl(MethodImplOptions.NoInlining)]");
Console.WriteLine($"static Func<int> F{i}() {{");
Console.WriteLine($"IL.Emit.Ldftn(MethodRef.Method(typeof(Impl), \"M{i}\"));");
Console.WriteLine("IL.Emit.Call(new MethodRef(TypeRef.FromDllFile(@\"C:\\runtime\\artifacts\\bin\\coreclr\\windows.x64.Release\\System.Private.Corelib.dll\", typeof(RuntimeHelpers)), \"GetDelegate\", 1, typeof(nint)).MakeGenericMethod(typeof(Func<int>)));");
Console.WriteLine("return IL.Return<Func<int>>();");
Console.WriteLine("}");
}
Console.WriteLine("class Impl { public readonly static Impl Instance = new Impl();");
for (int i = 0; i < count; i++)
{
Console.WriteLine($"public int M{i}() => {i};");
}
Console.WriteLine("}");
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment