• C#小性能知识


    字符串比较



    string s = ""; 1) if(s == ""){} 2) if(s == string.Empty){} 3) if (string.IsNullOrEmpty(s)) { } 4) if(s != null && s.Length ==0) {} 5) if((s+"").Length == 0){}

      

    1,2最慢 3较快 4,5最快

    1,2几乎没区别 4,5几乎没区别

    不过这个只适用于比较null和空字符串,如果是连续的空白就是string.IsNullOrWhiteSpace最快了,不过这个方法2.0里面没有

    所以2.0可以这样 (s+"").trim() == 0 

    这里的关键就是 s + ""  这个操作可以把null转换为""

    注意第二个参数只能是""或string.Empty 这样的累加几乎是不消耗时间的,如果第二个参数是" "(一个空格)这个时间就远远不止了

     

    字符串拼接

    字符串累加,这个道理和Regex一样,不要盲目崇拜StringBuilder

    在大量(或不确定的)string拼接的时候,StringBuilder确实可以起到提速的作用

    而少数几个固定的string累加的时候就不需要StringBuilder 了,毕竟StringBuilder 的初始化也是需要时间的

    以下代码,字符串不会在运行时进行拼接,而是会在编译时直接生成一个字符串。

    private static void NewMethod3()
    {
           string re2="123"+"abc"+"456";   ///该代码等效于///string re2="123abc456";  
    }
    
    private static void NewMethod4()
    {
          const string a="t";
          string re="abc"+a;   ///因为a是一个常量,所以该代码等效于string=re="abc"+"t";  最终等效于string re="abct";  
    }  
    

    如果有别的类型,最好先用.toString()的方法转换。

     

    感谢#5楼 2014-03-24 16:45 残蛹 博友提供的说明

    ps: 这段我确实记得我是写过的来着,不知道怎么的,发出来的时候就不见了.....

    此外还有一个string.Concat方法,该方法可以小幅度的优化程序的速度,幅度很小

    他和string.Join的区别在于没有间隔符号(我之前常用string.Join("",a,b,c,d),不要告诉我只有我一个人这么干)

    另一种经常遇到的字符串拼接

    public string JoinIds(List<User> users)
    {
        StringBuilder sb = new StringBuilder();
        foreach (var user in users)
        {
            sb.Append("'");
            sb.Append(user.Id);
            sb.Append("',");
        }
        sb.Length = sb.Length - 1;
        return sb.ToString();
    }
    

      

    对于这种情况有2中优化的方案

    对于3.5以上可以直接使用Linq辅助,这种方案代码少,但是性能相对差一些

    public string JoinIds(List<User> users)
    {
        return "'" + string.Join("','", users.Select(it => it.Id)) + "'";
    }
    

      

    对于非3.5或对性能要求极高的场合

    public string JoinIds(List<User> users)
    {
        var ee = users.GetEnumerator();
        StringBuilder sb = new StringBuilder();
        if (ee.MoveNext())
        {
            sb.Append("'");
            sb.Append(ee.Current.Id);
            sb.Append("'");
            while (ee.MoveNext())
            {
                sb.Append(",'");
                sb.Append(ee.Current.Id);
                sb.Append("'");
            }
        }
        return sb.ToString();
    }
    

      

    bool类型的判断返回

    这种现象常见于新手程序员中

    //写法1
    if(state == 1)
    {
        return true;
    }
    else
    {
        return false;
    }
    //写法2
    return state == 1 ? true : false;
    //优化后
    return state == 1;
    

      原文:C#中那些[举手之劳]的性能优化

     

     

     

     

     

     

  • 相关阅读:
    可变长参数列表
    《Android深入透析》之广播(Broadcast)
    android设计模式资源集合
    Android内存性能优化
    Java 对象的生命周期
    Android 打印java堆栈的几种方法
    Android下打印调试堆栈方法
    UML类图几种关系的总结
    【转】Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
    查看Android设备的CPU架构信息
  • 原文地址:https://www.cnblogs.com/qiywtc/p/3639996.html
Copyright © 2020-2023  润新知