zoukankan      html  css  js  c++  java
  • 学习笔记: 泛型

    List<object> 与 List<T> 区别

    object类型参数有2个问题:
    1 装箱拆箱,性能损耗
       传入一个int值(栈)
       object又在堆里面,如果把int传递进来,就会把值从栈里面copy到堆里
       使用的时候,又需要用对象值,又会copy到栈(拆箱)

    2 类型安全问题,可能会有,因为传递的对象是没有限制的

    image

    泛型方法与普通方法性能对比

    public class Monitor
    {
         public static void Show()
         {
             Console.WriteLine("****************Monitor******************");
             {
                 int iValue = 12345;
                 long commonSecond = 0;
                 long objectSecond = 0;
                 long genericSecond = 0;

                {
                     Stopwatch watch = new Stopwatch();
                     watch.Start();
                     for (int i = 0; i < 100_000_000; i++)
                     {
                         ShowInt(iValue);
                     }
                     watch.Stop();
                     commonSecond = watch.ElapsedMilliseconds;
                 }
                 {
                     Stopwatch watch = new Stopwatch();
                     watch.Start();
                     for (int i = 0; i < 100_000_000; i++)
                     {
                         ShowObject(iValue);
                     }
                     watch.Stop();
                     objectSecond = watch.ElapsedMilliseconds;
                 }
                 {
                     Stopwatch watch = new Stopwatch();
                     watch.Start();
                     for (int i = 0; i < 100_000_000; i++)
                     {
                         Show<int>(iValue);
                     }
                     watch.Stop();
                     genericSecond = watch.ElapsedMilliseconds;
                 }
                 Console.WriteLine("commonSecond={0},objectSecond={1},genericSecond={2}"
                     , commonSecond, objectSecond, genericSecond);
             }
         }

        #region PrivateMethod
         private static void ShowInt(int iParameter)
         {
             //do nothing
         }
         private static void ShowObject(object oParameter)
         {
             //do nothing
         }
         private static void Show<T>(T tParameter)
         {
             //do nothing
         }
         #endregion

    }

    image

    泛型方法与普通方法性能一致,还能一个方法满足多个不同类型

    object方法性能低: int 与 object 频繁装箱拆箱


    泛型缓存

    /// <summary>
    /// 每个不同的T,都会生成一份不同的副本
    /// 适合不同类型,需要缓存一份数据的场景,效率高
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class GenericCache<T>
    {
         static GenericCache()
         {
             Console.WriteLine("This is GenericCache 静态构造函数");
             _TypeTime = string.Format("{0}_{1}", typeof(T).FullName, DateTime.Now.ToString("yyyyMMddHHmmss.fff"));
         }

        private static string _TypeTime = "";

        public static string GetCache()
         {
             return _TypeTime;
         }
         //common<int>(1)
    }

  • 相关阅读:
    DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法
    DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week1深度学习的实用层面
    通俗理解决策树中的熵&条件熵&信息增益
    KNN实现手写数字识别
    softmax分类算法原理(用python实现)
    DeepLearning.ai学习笔记(一)神经网络和深度学习--Week4深层神经网络
    博客园自定义皮肤扁平化设计
    神经网络权重初始化问题
    OpenVirteX 安装
    从个人的角度谈谈本次GNTC大会的收获
  • 原文地址:https://www.cnblogs.com/xtxtx/p/10664988.html
Copyright © 2011-2022 走看看