Open
Description
Processing dotnet/runtime#106843 (comment) command:
Command
-intel -arm64
using BenchmarkDotNet.Attributes;
using System.Runtime.CompilerServices;
namespace VirtualDispatchChecks
{
class _1
{
public virtual string Method() => "A";
}
class _2 : _1
{
public override string Method() => "B";
}
class _3 : _1
{
public override string Method() => "C";
}
class _4 : _1
{
public override string Method() => "D";
}
class _5 : _1
{
public override string Method() => "E";
}
class _6 : _1
{
public override string Method() => "F";
}
class _7 : _1
{
public override string Method() => "F";
}
class _8 : _1
{
public override string Method() => "F";
}
class _9 : _1
{
public override string Method() => "F";
}
class _10 : _1
{
public override string Method() => "F";
}
public class ResolveVirtualRepeatedly
{
static _1 _1 = new _1();
static _1 _2 = new _2();
static _1 _3 = new _3();
static _1 _4 = new _4();
static _1 _5 = new _5();
static _1 _6 = new _6();
static _1 _7 = new _7();
static _1 _8 = new _8();
static _1 _9 = new _9();
static _1 _10 = new _10();
[MethodImpl(MethodImplOptions.NoInlining)]
static _1 GetA(int index)
{
switch (index % 10)
{
case 0:
return _10;
case 1: return _1;
case 2: return _2;
case 3: return _3;
case 4: return _4;
case 5: return _5;
case 6: return _6;
case 7: return _7;
case 8: return _8;
case 9: return _9;
}
return null!;
}
[MethodImpl(MethodImplOptions.NoInlining)]
static Func<string> GetAction(int index)
{
return GetA(index).Method;
}
[Benchmark]
public void Get1Virtual()
{
GetAction(0);
}
[Benchmark]
public void Get10Virtual()
{
GetAction(0);
GetAction(1);
GetAction(2);
GetAction(3);
GetAction(4);
GetAction(5);
GetAction(6);
GetAction(7);
GetAction(8);
GetAction(9);
}
}
}
(EgorBot will reply in this issue)
Metadata
Metadata
Assignees
Labels
No labels