zoukankan      html  css  js  c++  java
  • String PK StringBuilder,传说就是传说,只有动手实验,才能得出确定的答案

    本机测试结果如下:

    大部分情况下,string 性能并不比StringBuilder差,只有特殊情况才出现差异,并非 如前面有些朋友测试的结果哪样,只要使用StringBuilder 就一定比String表现优异。

    另外,大多数测试者都没有考虑内存分配的时间与成本(因为大多数的内存都比较在>2G)。

    本次测试也只考虑 时间运行 效率,没有考虑空间成本

    本次测试条件:.net 4.0  硬件:Tinkpad t540P,4G内存 win8.1

    第一种方法:

      1 [TestClass]
      2     public class StringTest1
      3     {
      4         [TestMethod]
      5         public void String1Test1()
      6         {
      7             for (int i = 0; i < 1; i++)
      8             {
      9                 string queryString = @"select p from DALParty as p where p.OwnerID=:OwnerID";
     10                 queryString += " and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)";
     11                 queryString += " order by p.Name ";
     12             }
     13         }
     14         [TestMethod]
     15         public void String10Test1()
     16         {
     17             for (int i = 0; i < 10; i++)
     18             {
     19                 string queryString = @"select p from DALParty as p where p.OwnerID=:OwnerID";
     20                 queryString += " and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)";
     21                 queryString += " order by p.Name ";
     22             }
     23         }
     24         [TestMethod]
     25         public void String100Test1()
     26         {
     27             for (int i = 0; i < 100; i++)
     28             {
     29                 string queryString = @"select p from DALParty as p where p.OwnerID=:OwnerID";
     30                 queryString += " and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)";
     31                 queryString += " order by p.Name ";
     32             }
     33         }
     34         [TestMethod]
     35         public void String1000Test1()
     36         {
     37             for (int i = 0; i < 1000; i++)
     38             {
     39                 string queryString = @"select p from DALParty as p where p.OwnerID=:OwnerID";
     40                 queryString += " and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)";
     41                 queryString += " order by p.Name ";
     42             }
     43         }
     44         [TestMethod]
     45         public void String10000Test1()
     46         {
     47             for (int i = 0; i < 10000; i++)
     48             {
     49                 string queryString = @"select p from DALParty as p where p.OwnerID=:OwnerID";
     50                 queryString += " and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)";
     51                 queryString += " order by p.Name ";
     52             }
     53         }
     54 
     55         [TestMethod]
     56         public void StringBuilder1Test1()
     57         {            
     58             for (int i = 0; i < 1; i++)
     59             {
     60                 StringBuilder ssb = new StringBuilder();
     61                 ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
     62                 ssb.Append(" and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)");
     63                 ssb.Append(" order by p.Name ");
     64             }
     65         }
     66         [TestMethod]
     67         public void StringBuilder10Test1()
     68         {
     69             for (int i = 0; i < 10; i++)
     70             {
     71                 StringBuilder ssb = new StringBuilder();
     72                 ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
     73                 ssb.Append(" and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)");
     74                 ssb.Append(" order by p.Name ");
     75             }
     76         }
     77         [TestMethod]
     78         public void StringBuilder100Test1()
     79         {
     80             for (int i = 0; i < 100; i++)
     81             {
     82                 StringBuilder ssb = new StringBuilder();
     83                 ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
     84                 ssb.Append(" and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)");
     85                 ssb.Append(" order by p.Name ");
     86             }
     87         }
     88         [TestMethod]
     89         public void StringBuilder1000Test1()
     90         {
     91             for (int i = 0; i < 1000; i++)
     92             {
     93                 StringBuilder ssb = new StringBuilder();
     94                 ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
     95                 ssb.Append(" and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)");
     96                 ssb.Append(" order by p.Name ");
     97             }
     98         }
     99         [TestMethod]
    100         public void StringBuilder10000Test1()
    101         {
    102             for (int i = 0; i < 10000; i++)
    103             {
    104                 StringBuilder ssb = new StringBuilder();
    105                 ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
    106                 ssb.Append(" and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)");
    107                 ssb.Append(" order by p.Name ");
    108             }
    109         }
    110     }
    View Code

    第二种方法

      1 [TestClass]
      2     public class StringTest2
      3     {
      4         [TestMethod]
      5         public void String1Test2()
      6         {
      7             string queryString = string.Empty;
      8             for (int i = 0; i < 1; i++)
      9             {
     10                 queryString = string.Empty;
     11                 queryString = @"select p from DALParty as p where p.OwnerID=:OwnerID";
     12                 queryString += " and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)";
     13                 queryString += " order by p.Name ";
     14             }
     15         }
     16         [TestMethod]
     17         public void String10Test2()
     18         {
     19             string queryString = string.Empty;
     20             for (int i = 0; i < 10; i++)
     21             {
     22                 queryString = string.Empty;
     23                 queryString = @"select p from DALParty as p where p.OwnerID=:OwnerID";
     24                 queryString += " and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)";
     25                 queryString += " order by p.Name ";
     26             }
     27         }
     28         [TestMethod]
     29         public void String100Test2()
     30         {
     31             string queryString = string.Empty;
     32             for (int i = 0; i < 100; i++)
     33             {
     34                 queryString = string.Empty;
     35                 queryString = @"select p from DALParty as p where p.OwnerID=:OwnerID";
     36                 queryString += " and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)";
     37                 queryString += " order by p.Name ";
     38             }
     39         }
     40         [TestMethod]
     41         public void String1000Test2()
     42         {
     43             string queryString = string.Empty;
     44             for (int i = 0; i < 1000; i++)
     45             {
     46                 queryString = string.Empty;
     47                 queryString = @"select p from DALParty as p where p.OwnerID=:OwnerID";
     48                 queryString += " and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)";
     49                 queryString += " order by p.Name ";
     50             }
     51         }
     52         [TestMethod]
     53         public void String10000Test2()
     54         {
     55             string queryString = string.Empty;
     56             for (int i = 0; i < 10000; i++)
     57             {
     58                 queryString = string.Empty;
     59                 queryString = @"select p from DALParty as p where p.OwnerID=:OwnerID";
     60                 queryString += " and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)";
     61                 queryString += " order by p.Name ";
     62             }
     63         }
     64 
     65         [TestMethod]
     66         public void StringBuilder1Test2()
     67         {
     68             StringBuilder ssb = new StringBuilder();
     69             for (int i = 0; i < 1; i++)
     70             {
     71                 ssb.Clear();
     72                 ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
     73                 ssb.Append(" and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)");
     74                 ssb.Append(" order by p.Name ");
     75             }
     76         }
     77         [TestMethod]
     78         public void StringBuilder10Test2()
     79         {
     80             StringBuilder ssb = new StringBuilder();
     81             for (int i = 0; i < 10; i++)
     82             {
     83                 ssb.Clear();
     84                 ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
     85                 ssb.Append(" and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)");
     86                 ssb.Append(" order by p.Name ");
     87             }
     88         }
     89         [TestMethod]
     90         public void StringBuilder100Test2()
     91         {
     92             StringBuilder ssb = new StringBuilder();
     93             for (int i = 0; i < 100; i++)
     94             {
     95                 ssb.Clear();
     96                 ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
     97                 ssb.Append(" and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)");
     98                 ssb.Append(" order by p.Name ");
     99             }
    100         }
    101         [TestMethod]
    102         public void StringBuilder1000Test2()
    103         {
    104             StringBuilder ssb = new StringBuilder();
    105             for (int i = 0; i < 1000; i++)
    106             {
    107                 ssb.Clear();
    108                 ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
    109                 ssb.Append(" and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)");
    110                 ssb.Append(" order by p.Name ");
    111             }
    112         }
    113         [TestMethod]
    114         public void StringBuilder10000Test2()
    115         {
    116             StringBuilder ssb = new StringBuilder();
    117             for (int i = 0; i < 10000; i++)
    118             {
    119                 ssb.Clear();
    120                 ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
    121                 ssb.Append(" and (p.Name like :Name  or p.Code like :Name or p.TaxCode like :Name)");
    122                 ssb.Append(" order by p.Name ");
    123             }
    124         }
    125     }
    View Code

    测试结果如下:


    根据测试结果如下:

     如果 字符串拼接 次数很小 <= 1000次,两者性能几乎没有差别,只有在字符本身长度大,拼接次数很大的情况下,使用StringBuilder才有意义。

     通过第二次方法测试可表明,在循环体内 每次 new StringBuilder 时,是非常耗时的工作,并且new时预分配内存,也是占内存的,有时并没有使用到。

    因此:使用string 还是 StringBuilder 还要看使用环境。

    在大部分情况下,string 并不会对性能造成损失,使用string 即方便,也经济,仍然是字符串操作的首先。

  • 相关阅读:
    获取IPhone相册中图片的方法(包括获取所有图片)
    CocoaPods的安装与使用介绍
    屏幕截图
    图片水印(微博图片上面的个人签名)
    info.plist选项含义
    最苦恼的又重要的屏幕适配
    Redis
    python的约束库constraint解决《2018刑侦科题目》
    start to learn python!
    用户体验分析: 以 “南通大学教务管理系统微信公众号” 为例
  • 原文地址:https://www.cnblogs.com/yyj/p/3933541.html
Copyright © 2011-2022 走看看