zoukankan      html  css  js  c++  java
  • c#中容易忽略的性能优化点

    统计性能的方法:GC内存和执行时间

    private static void Main(string[] args)
            {
                Stopwatch watch = new Stopwatch();
                watch.Start();
                long start = GC.GetTotalMemory(true);
                
                //需要统计内存和时间的操作          
    
                GC.Collect();
                GC.WaitForFullGCComplete();
                long end = GC.GetTotalMemory(true);
                long useMemory = end - start;
                watch.Stop();
                var useTime = (double)watch.ElapsedMilliseconds / 1000;
                Console.WriteLine($"memory:{useMemory}::time{useTime}");
                Console.ReadKey();
            }

    性能优化点总结:

    • 使用值类型的ToString方法

      使用+号连接字符串时,值类型需要通过装箱操作转化为引用类型才可以添加到字符串中。但是装箱操作对性能影响较大,     因为在进行这类处理时,将在托管堆中分配一个新的对象,原有的值复制到新创建的对象中。
      使用值类型的ToString方法可以避免装箱操作,从而提高应用程序性能。
    int num=1;
    string str="go"+num.ToString();

    • 运用StringBuilder类(循环中)拼接长字符串

      String类对象是不可改变的,在处理字符串时,最好使用StringBuilder类,该类并非创建新的对象,而是通过Append,Remove,Insert等方法直接对字符串进行操作,通过ToString方法返回操作结果。格式化字符串时也尽量使用此类:

    StringBuilder s=new StringBuilder();

    s.AppendFormat(baseString,param);

    • 避免使用ArrayList。

    因为任何对象添加到ArrayList都要封箱为System.Object类型,从ArrayList取出数据时,要拆箱回实际的类型。建议使用List<T>,大幅提升值类型性能;

    • 字符串空判断

     使用if (string.IsNullOrEmpty(s)) { }或if(s != null && s.Length ==0) {}

     不要使用:if(s == ""){}

    • 避免循环中创建对象

      在循环外创建空对象,循环内赋值使用

    • try{}catch(){}

      catch具体的异常并且不要改变流程

          性能低,应避免在循环中使用

    • 可复用的对象静态化处理,避免频繁GC

            如:配置文件对象:IConfigurationRoot,网络对象HttpClient

  • 相关阅读:
    dockerfile 详解
    kubectl简介
    关于高级事件的使用
    关于拖拽延伸出来的一些效果
    照片墙的制作过程及其出现的问题
    关于360度全景照片的问题总结
    实战演练-记账本App (五)
    人月神话阅读笔记02
    实战演练-记账本App(四)
    实战演练-记账本App(三)
  • 原文地址:https://www.cnblogs.com/Zdelta/p/14122307.html
Copyright © 2011-2022 走看看