All pastes #412195 Raw Edit

Mine

public text v1 · immutable
#412195 ·published 2007-03-27 15:37 UTC
rendered paste body
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;
		}
	}
}