如果我有这么一个方法
public void GetSubData()
{
string sqlstr = "select * from table1";
cmm.ExecuteReader(sqlstr);//假设这个是作用数据库的语句
sqlstr = "select * from table2";
cmm1.ExecuteReader(sqlstr);//假设这个是作用数据库的语句 }
现在想改会stringBuilder怎么该,是new 两个stringBuilder
还是只要new 一个
public void GetSubData()
{
string sqlstr = "select * from table1";
cmm.ExecuteReader(sqlstr);//假设这个是作用数据库的语句
sqlstr = "select * from table2";
cmm1.ExecuteReader(sqlstr);//假设这个是作用数据库的语句 }
现在想改会stringBuilder怎么该,是new 两个stringBuilder
还是只要new 一个
sB.Append(s1);String s2 = "world";
sB.Append(s2);sB.ToString(); 的结果是"hello world"
无须清除以前的内容!
sB.ToString();sB.Replace("table1","table2");
sB.ToString();你查看结果就知道它的用处了
二、这样的情况可以使用模板,例如:static string template1 = "select * from {0}"//.....cmm.ExecuteReader( string.Format( template1, "table2" ) );
但是这样调用SQL语句有潜在的注入式漏洞。一个变量只作一个用途,储存一种数据,这样程序会更清晰,无必要为了省掉一个StringBuilder对象把程序变复杂。
string---使用方便.
StringBuilder---使用更少的资源(直接说是内存,但因为内存开辟次数减少引起GC回收次数变少,也另外一方面间接节约了CPU)比如在一个QQ群1年的聊天记录中搜索统计每个人发言次数这样的操作,几乎只能用StringBuilder,直接用string几乎可以确定会死机.
string s = ;
long t1 = System.DateTime.Now.Ticks;
for(int i=0;i<10000;i++)s += Convert.ToString(i);
long t2 = System.DateTime.Now.Ticks; long t3 = System.DateTime.Now.Ticks;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for(int i=0;i<10000;i++)sb.Append(Convert.ToString(i));
string s1 = sb.ToString();
long t4 = System.DateTime.Now.Ticks; long t5 = System.DateTime.Now.Ticks;
System.Text.StringBuilder sb1 = new System.Text.StringBuilder(5000);
for(int i=0;i<10000;i++)sb1.Append(i);
string s2 = sb1.ToString();
long t6 = System.DateTime.Now.Ticks; long t7 = System.DateTime.Now.Ticks;
System.Text.StringBuilder sb2 = new System.Text.StringBuilder(10000);
for(int i=0;i<10000;i++)sb2.Append(i);
string s3 = sb2.ToString();
long t8 = System.DateTime.Now.Ticks; ListViewItem item1 = result.Items.Add(使用String类,利用operator +进行操作);
item1.SubItems.Add(Convert.ToString((t2-t1)/10000)); ListViewItem item2 = result.Items.Add(使用StringBuilder类,不对初始大小赋值);
item2.SubItems.Add(Convert.ToString((t4-t3)/10000)); ListViewItem item3 = result.Items.Add(使用StringBuilder类,对初始大小赋值为申请数量的1/2);
item3.SubItems.Add(Convert.ToString((t6-t5)/10000)); ListViewItem item4 = result.Items.Add(使用StringBuilder类,对初始大小赋值为申请数量);
item4.SubItems.Add(Convert.ToString((t8-t7)/10000));