C#性能测试

看到很多新手对C#的执行效率抱有疑问.不禁自己亲手测试了一下.使用插入排序的办法对堆栈中的变量进行排序.考虑到泛型和摸版的效率差别不大.这里就暂时只考虑堆栈中变量的效率测试(我想高手会对我有点意见,但是就算是泛型的效率也应该很高吧).测试机器:P4 2.8GHz, RAM 768MB, windows xp professional sp2

// C#
class Program

    {

        public void Sort(int[] arr)

        {

            for (int i = 1; i < arr.Length; i++)

            {

                int t = arr[i];

                int j = i;

                while ((j > 0) && (arr[j - 1] > t))

                {

                    arr[j] = arr[j - 1];//交换顺序   

                    --j;

                }

                arr[j] = t;

            }

        } 



        static void Main(string[] args)

        {

            int[] iArrary = new int[30000];

            Random rd = new Random();

            for (int i = 0; i < 30000; i++)

            {

                iArrary[i] = rd.Next(0, 9999);

            }



            long begin = DateTime.Now.Ticks;

            Program q = new Program();

            q.Sort(iArrary);

            long end = DateTime.Now.Ticks;



            for (int m = 0; m < 30000; m++)

            Console.WriteLine("{0}", iArrary[m]);

            Console.Write(end - begin);

            Console.ReadLine();

        }  

    }

执行时间:1.5秒整.

//C++
void sort(int *a, int length)

{

   for (int i = 1; i < length; i++)

   {

	   int t = a[i];               

	   int j = i;               

	   while ((j > 0) && (a[j - 1] > t))

	   {

		   a[j] = a[j - 1];//交换顺序   

		   --j;

	   }                

	   a[j] = t;            

   }

}



int _tmain(int argc, _TCHAR* argv[])

{

	int buffer[30000];

	int length = 30000;

	srand((unsigned)GetCurrentTime());

	for(int i = 0; i < length; i++)

	{

		buffer[i] = rand();

	}

	DWORD dwStart,dwStop;

	dwStart = GetTickCount();

	sort(buffer,length);

	dwStop = GetTickCount();

	printf("Time: %d /n",(dwStop - dwStart));

	char ch;

	scanf("ss %c",&ch);

	return 0;
}

执行时间:1.25秒

然后我将数组改成 80000.执行时间分别为10.87秒和9.125秒.等出结论,在时间复杂度和空间复杂度的计算上.C#执行效率比C++慢26%.也就是说需要将时间精确到秒为单位的系统将不用考虑误差的问题而放心使用C#.又或者说这样的效率比较是绝对可以忍受的.因为这里的例子同样使用的是堆栈,同样使用的选择排序算法.一个用指针,一个用索引块,一个用机器码一个用JIT及时编译.所以能将差距缩小到这个份上C#确实不简单.而相较于C#提供的便利来说,26%的性能损失完全可以接受.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值