zoukankan      html  css  js  c++  java
  • 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#中那些[举手之劳]的性能优化

     

     

     

     

     

     

  • 相关阅读:
    bzoj1415 NOI2005聪聪和可可
    Tyvj1952 Easy
    poj2096 Collecting Bugs
    COGS 1489玩纸牌
    COGS1487 麻球繁衍
    cf 261B.Maxim and Restaurant
    cf 223B.Two Strings
    cf 609E.Minimum spanning tree for each edge
    cf 187B.AlgoRace
    cf 760B.Frodo and pillows
  • 原文地址:https://www.cnblogs.com/qiywtc/p/3639996.html
Copyright © 2011-2022 走看看