Dav*_*art 69 .net c# optimization .net-3.5
我想问一下你认为最好的方法(持续时间更少/消耗更少的资源)来清除内容以重用StringBuilder.想象一下以下场景:
StringBuilder sb = new StringBuilder();
foreach(var whatever in whateverlist)
{
sb.Append("{0}", whatever);
}
//Perform some stuff with sb
//Clear stringbuilder here
//Populate stringbuilder again to perform more actions
foreach(var whatever2 in whateverlist2)
{
sb.Append("{0}", whatever2);
}
Run Code Online (Sandbox Code Playgroud)
在清除StringBuilder时,我可以想到两种可能性:
sb = new StringBuilder();
Run Code Online (Sandbox Code Playgroud)
要么
sb.Length = 0;
Run Code Online (Sandbox Code Playgroud)
清除它的最佳方法是什么?为什么?
谢谢.
编辑:我使用当前的.NET 3.5版本.
Mik*_*fer 68
如果您在.NET 2.0或3.5中执行此操作,请编写一个扩展方法来执行此操作:
/// <summary>
/// Clears the contents of the string builder.
/// </summary>
/// <param name="value">
/// The <see cref="StringBuilder"/> to clear.
/// </param>
public static void Clear(this StringBuilder value)
{
value.Length = 0;
value.Capacity = 0;
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以像这样清除它:
someStringBuilder.Clear();
Run Code Online (Sandbox Code Playgroud)
然后,当4.0出来时,你可以放弃你的扩展方法,而不是4.0版本.
更新:将Capacity设置为零可能不是一个好主意.如果您重复使用同一个实例,那么当您追加到构建器时,这将保证重新分配.但是,在将Capacity设置为非常小的值(例如1)之前,不会释放构建器实例中的内存.Capacity属性的默认值为16.您可能要考虑使用16,或者(虽然效率较低)将容量设置两次:
Gra*_*meF 28
在.NET 4.0中,您可以调用,sb.Clear()但在旧版本中,您应该设置sb.Length = 0.
该Clear()方法是在.NET 4.0中添加的.
Ear*_*rlz 11
我认为你正在做过早的优化.
我敢打赌,做sb.Length=0;最快的事情就是不要创建另一个对象并将另一个对象放在一边,以便GC最终收集.
我认为创建一个新的StringBuilder将是内存问题的最佳镜头.和设置sb.Length将是速度问题的最佳镜头..
Yur*_*ich 11
来自MSDN上的社区内容:
要有效地清除你的stringbuilder而不破坏它,请使用:
Run Code Online (Sandbox Code Playgroud)someStringBuilder.length = 0; someStringBuilder.capacity = 0;这会破坏其内容并将其调整为零.如上所述,清除尺寸会影响较小的应用.
在.NET Framework 4中,在StringBuilder类中引入了新方法.方法名称为"清除".此方法可帮助您清除或删除StringBuilder对象中的值或数据.
这是一个例子.
System.Text.StringBuilder objSB = new System.Text.StringBuilder();
//Append values
objSB.Append("This is .Net Blog.");
objSB.Append("You can get latest C# Tips over here.");
//Display on screen
Response.Write(objSB.ToString());
Response.Write("<br/><br/>");
//Clear object using Clear method
objSB.Clear();
//Append another values
objSB.Append("This blog is very useful for .Net Beginners");
Response.Write("After Clear<br/><br/>");
//Display on screen
Response.Write(objSB.ToString());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67237 次 |
| 最近记录: |