using 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; } } }