ddv wrote:Я специально в отладчике посмотрел код.
А этого делать ненужно. Отладчик для managed apps - это штука такая, "you never know what you're gonna get"
Сделайте две assemblies, одну с кодом вроде:
Code: Select all
using System.Runtime.CompilerServices;
namespace A
{
public class X
{
// [MethodImpl(MethodImplOptions.NoInlining)]
public static int Add(int x, int y) { return x+y; }
}
}
А вторую - бенчмарк:
Code: Select all
using System;
using System.Diagnostics;
namespace simple
{
class Program
{
static void Main(string[] args)
{
int z=0;
var start = Stopwatch.StartNew();
for (long i = 0; i < 1024L * 1024 * 1024; ++i)
z = A.X.Add(z,z);
Console.WriteLine("Elapsed:"+start.ElapsedMilliseconds);
Console.WriteLine("Press Enter");
Console.WriteLine(z); // so it's not optimized out
Console.ReadLine();
}
}
}
А потом сравните время исполнения с включенным и выключенным inlining Add (без отладчика). Будет отличаться в разы. При запуске в отладчике время будет одинаковым.
При этом время исполнения будет одинаково, независимо от того находится Add в том же модуле что Main, или в отдельном.