Здравствуйте, Somescout, Вы писали:
S>Архив проекта. Я в попытках понять что не так насоздавал множество конфигфигураций, trace выключен в x64 и включён во всех остальных.
S>Visual Studio 2015 Community Ed. Update 3
Мерять надо правильно
| | Скрытый текст |
| | class Program
{
// Fast doubling algorithm
// https://www.nayuki.io/res/fast-fibonacci-algorithms/fastfibonacci.cs
private static long FibonacciNayuki(int n)
{
long a = 0;
long b = 1;
for (int i = 31; i >= 0; i--)
{
long d = a * (b * 2 - a);
long e = a * a + b * b;
a = d;
b = e;
if ((((uint)n >> i) & 1) != 0)
{
long c = a + b;
a = b;
b = c;
}
}
return a;
}
static void Main(string[] args)
{
Console.WindowWidth = 120;
Measure("FibNayuki", () => FibonacciNayuki(40));
Measure("FibObj", () => new FibObj(40).Value);
Measure("FibStr", () => new FibStr(40).Value);
Console.ReadKey();
}
static void Measure(string name, Func<long> callback)
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
var mem = GC.GetTotalMemory(true);
var gc00 = GC.CollectionCount(0);
var gc01 = GC.CollectionCount(1);
var gc02 = GC.CollectionCount(2);
var sw = Stopwatch.StartNew();
var result = callback();
sw.Stop();
var mem2 = GC.GetTotalMemory(false);
var gc10 = GC.CollectionCount(0);
var gc11 = GC.CollectionCount(1);
var gc12 = GC.CollectionCount(2);
var memDelta = (mem2 - mem) / 1024.0;
var gcDelta0 = gc10 - gc00;
var gcDelta1 = gc11 - gc01;
var gcDelta2 = gc12 - gc02;
Console.WriteLine(
"{0,15}: {1,5}ms, ips: {2,22:N} | Mem: {3,9:N2} kb, GC 0/1/2: {4,4}/{5}/{6} => {7,6}",
name, sw.ElapsedMilliseconds, result / sw.Elapsed.TotalSeconds, memDelta, gcDelta0, gcDelta1, gcDelta2, result);
}
}
|
| | |
FibNayuki: 0ms, ips: 374 713 127 059,69 | Mem: 8,00 kb, GC 0/1/2: 0/0/0 => 102334155
FibObj: 1501ms, ips: 68 167 404,43 | Mem: 1 688,17 kb, GC 0/1/2: 1561/0/0 => 102334155
FibStr: 477ms, ips: 214 160 637,60 | Mem: 8,00 kb, GC 0/1/2: 0/0/0 => 102334155
Что с TRACE, что с без. Запускать, разумеется, release-версию AnyCpu по Сtrl-F5, без отладчика.
Если хочется проверить на RyuJit — дополнительно снимаем галочку "prefer 32 bit" в свойствах проекта, вкладка Build.