String PK StringBuilder,传说就是传说,只有动手实验,才能得出确定的答案
2014-08-24 21:21
260 查看
本机测试结果如下:
大部分情况下,string 性能并不比StringBuilder差,只有特殊情况才出现差异,并非 如前面有些朋友测试的结果哪样,只要使用StringBuilder 就一定比String表现优异。
另外,大多数测试者都没有考虑内存分配的时间与成本(因为大多数的内存都比较在>2G)。
本次测试也只考虑 时间运行 效率,没有考虑空间成本
本次测试条件:.net 4.0 硬件:Tinkpad t540P,4G内存 win8.1
第一种方法:
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 }
}
[TestMethod]
public void StringBuilder1000Test2()
{
StringBuilder ssb = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
ssb.Clear();
ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
ssb.Append(" and (p.Name like :Name or p.Code like :Name or p.TaxCode like :Name)");
ssb.Append(" order by p.Name ");
}
}
[TestMethod]
public void StringBuilder10000Test2()
{
StringBuilder ssb = new StringBuilder();
for (int i = 0; i < 10000; i++)
{
ssb.Clear();
ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
ssb.Append(" and (p.Name like :Name or p.Code like :Name or p.TaxCode like :Name)");
ssb.Append(" order by p.Name ");
}
}
}View Code
测试结果如下:
根据测试结果如下:
如果 字符串拼接 次数很小 <= 1000次,两者性能几乎没有差别,只有在字符本身长度大,拼接次数很大的情况下,使用StringBuilder才有意义。
通过第二次方法测试可表明,在循环体内 每次 new StringBuilder 时,是非常耗时的工作,并且new时预分配内存,也是占内存的,有时并没有使用到。
因此:使用string 还是 StringBuilder 还要看使用环境。
在大部分情况下,string 并不会对性能造成损失,使用string 即方便,也经济,仍然是字符串操作的首先。
大部分情况下,string 性能并不比StringBuilder差,只有特殊情况才出现差异,并非 如前面有些朋友测试的结果哪样,只要使用StringBuilder 就一定比String表现优异。
另外,大多数测试者都没有考虑内存分配的时间与成本(因为大多数的内存都比较在>2G)。
本次测试也只考虑 时间运行 效率,没有考虑空间成本
本次测试条件:.net 4.0 硬件:Tinkpad t540P,4G内存 win8.1
第一种方法:
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 }
}
[TestMethod]
public void StringBuilder1000Test2()
{
StringBuilder ssb = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
ssb.Clear();
ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
ssb.Append(" and (p.Name like :Name or p.Code like :Name or p.TaxCode like :Name)");
ssb.Append(" order by p.Name ");
}
}
[TestMethod]
public void StringBuilder10000Test2()
{
StringBuilder ssb = new StringBuilder();
for (int i = 0; i < 10000; i++)
{
ssb.Clear();
ssb.Append(@"select p from DALParty as p where p.OwnerID=:OwnerID");
ssb.Append(" and (p.Name like :Name or p.Code like :Name or p.TaxCode like :Name)");
ssb.Append(" order by p.Name ");
}
}
}View Code
测试结果如下:
根据测试结果如下:
如果 字符串拼接 次数很小 <= 1000次,两者性能几乎没有差别,只有在字符本身长度大,拼接次数很大的情况下,使用StringBuilder才有意义。
通过第二次方法测试可表明,在循环体内 每次 new StringBuilder 时,是非常耗时的工作,并且new时预分配内存,也是占内存的,有时并没有使用到。
因此:使用string 还是 StringBuilder 还要看使用环境。
在大部分情况下,string 并不会对性能造成损失,使用string 即方便,也经济,仍然是字符串操作的首先。
相关文章推荐
- 编写一个程序,对于小于1000的正整数,通过实验确定期望产生多少个数才能使得每个数至少出现一次。
- 只有动手写代码,才能掌握知识,只看不写就是纸上谈兵。
- 这个世界只有偏执狂才能成功。马云曾说:“今天很残酷,明天更残酷,后天很美好,但是绝大部分人是死在明天晚上。”坚持就是胜利!
- 编写一个程序,对于小于1000的正整数,通过实验确定期望产生多少个数才能出现重复。
- 算法:对于小于1000的随机正整数,通过实验确定期望产生多少个数才能出现重复
- 只有运用你的逻辑才能看懂其中的恐怖及答案
- 在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编
- 在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编
- 有1000瓶药水,其中只有一瓶有毒。现在用小白鼠进行实验,小白鼠只要服用任意量有毒药水就会在24小时内死亡。问至少要用多少只小白鼠进行实验才能检测出哪瓶药水有毒?
- 在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编
- 转载:关于轮子,总结:只有自己动手才能学到东西,多尝试
- 只有动手才能发现问题
- Delphi程序员如何找到高薪的工作?(赚不到钱,原因只有一个,就是他们没有被公司录取。Delphi必须要独自进行深入研究,才能精通,同时也不能自由性太强)
- Sting&&StringBuffer&StringBuilder三者区别
- Java中的String、StringBuilder、StringBuffrer
- java基础复习(一)String、StringBuffer、StringBuilder的区别
- Win2008 R2 VDI动手实验系列之三:远程桌面会话主机配置
- String 和 == 的小实验
- string和stringBuilder的区别
- String、StringBuffer和StringBuilder的区别