rendered paste bodyusing System;
namespace MonoTorrent.Clienta
{
class Program
{
static void Main(string[] args)
{
long a = 0;
long b = 0;
long num = 5;
while (true)
{
long start = Environment.TickCount;
for (int i = 0; i < 10000000; i++)
SwapLong(num);
start = Environment.TickCount - start;
a += start;
start = Environment.TickCount;
for (int i = 0; i < 10000000; i++)
SwapLongFaster(num);
start = Environment.TickCount - start;
b += start;
Console.WriteLine("Original: " + a);
Console.WriteLine("Faster: " + b);
Console.WriteLine();
}
}
private static long SwapLong(long number)
{
return (((number >> 56) & 0xFF)
| ((number >> 40) & 0xFF00)
| ((number >> 24) & 0xFF0000)
| ((number >> 08) & 0xFF000000)
| ((number << 08) & 0xFF00000000)
| ((number << 24) & 0xFF0000000000)
| ((number << 40) & 0xFF000000000000)
| ((number << 56)));
}
private unsafe static long SwapLongFaster(long number)
{
long result;
byte* rPtr = (byte*)&result;
byte* oPtr = (byte*)&number;
*(rPtr + 7) = *(oPtr + 0);
*(rPtr + 6) = *(oPtr + 1);
*(rPtr + 5) = *(oPtr + 2);
*(rPtr + 4) = *(oPtr + 3);
*(rPtr + 3) = *(oPtr + 4);
*(rPtr + 2) = *(oPtr + 5);
*(rPtr + 1) = *(oPtr + 6);
*(rPtr + 0) = *(oPtr + 7);
return result;
}
}
}