zoukankan      html  css  js  c++  java
  • C#中使用泛型对照使用通用基础类型效率减少近一倍

    

    C#中使用泛型对照使用通用基础类型效率减少近一倍


    以下是測试结果:

    CSharp class and generic TotalMilliseconds: 270772.9229
    CSharp generic TotalMilliseconds: 269963.3999
    CSharp normal TotalMilliseconds: 159716.9094


    測试代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static class InsertionSort<T> where T : IComparable
            {
                public static void Sort(T[] a)
                {
                    for (var i = 0 + 1; i <= a.Length - 1; i++)
                    {
                        var tmp = a[i];
                        int j = i;
    
                        while (j > 0 && a[j - 1].CompareTo(tmp) > 0)
                            a[j] = a[--j];
    
                        a[j] = tmp;
                    }
                }
            }
    
            public static void CSharpInsertionSortGeneric<T>(T[] a) where T : IComparable
            {
                for (var i = 0 + 1; i <= a.Length - 1; i++)
                {
                    var tmp = a[i];
                    int j = i;
    
                    while (j > 0 && a[j - 1].CompareTo(tmp) > 0)
                        a[j] = a[--j];
    
                    a[j] = tmp;
                }
            }
    
            public static void CSharpInsertionSort(int[] a)
            {
                for (var i = 0 + 1; i <= a.Length - 1; i++)
                {
                    var tmp = a[i];
                    int j = i;
    
                    while (j > 0 && a[j - 1].CompareTo(tmp) > 0)
                        a[j] = a[--j];
    
                    a[j] = tmp;
                }
            }
    
            static void Main(string[] args)
            {
                DateTime start = DateTime.Now;
                int[] a = new int[200000];
                for (int i = 0; i < 200000; i++)
                {
                    a[i] = 100 - i;
                }
                InsertionSort<int>.Sort(a);
                DateTime end = DateTime.Now;
                Console.WriteLine(string.Format("CSharp class and generic TotalMilliseconds: {0}", (end - start).TotalMilliseconds));
    
                int[] a2 = new int[200000];
                for (int i = 0; i < 200000; i++)
                {
                    a2[i] = 100 - i;
                }
                CSharpInsertionSortGeneric(a2);
                DateTime end2 = DateTime.Now;
                Console.WriteLine(string.Format("CSharp generic TotalMilliseconds: {0}", (end2 - end).TotalMilliseconds));
    
                int[] a3 = new int[200000];
                for (int i = 0; i < 200000; i++)
                {
                    a3[i] = 100 - i;
                }
                CSharpInsertionSort(a3);
                DateTime end3 = DateTime.Now;
                Console.WriteLine(string.Format("CSharp normal TotalMilliseconds: {0}", (end3 - end2).TotalMilliseconds));
    
    
                //Console.WriteLine(String.Join(" ", a));
                Console.ReadKey();
            }
        }
    }
    


    非常显然,泛型减少了效率但提高了灵活性。

    可是从MSDN上https://msdn.microsoft.com/en-us/library/ms172192.aspx 看到泛型有个有长处:

    Better performance. Generic collection types generally perform better for storing and manipulating value types because there is no need to box the value types.

    性能非常好?非常怀疑这不是每种情况下都是性能非常好。为什么会这样?可能是执行时泛型会做很多其它的内存操作由此产生了效率的减少。


  • 相关阅读:
    bzoj3507: [Cqoi2014]通配符匹配
    bzoj2120: 数颜色
    bzoj2038: [2009国家集训队]小Z的袜子(hose)
    laravel表单图片上传
    laravel使用$errors提取错误信息
    laravel中的old()函数
    laravel的函数asset()、url()
    laravel表单提交
    laravel中if
    laravel的foreach
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7255934.html
Copyright © 2011-2022 走看看