在循环内部/外部声明变量会改变性能吗?

Rod*_*Rod 11 c#

这是:

foreach(Type item in myCollection)
{
   StringBuilder sb = new StringBuilder();
}
Run Code Online (Sandbox Code Playgroud)

慢得多:

StringBuilder sb = new StringBuilder();

foreach(Type item in myCollection)
{
   sb = new StringBuilder();
}
Run Code Online (Sandbox Code Playgroud)

换句话说,我宣布我的地方真的很重要StringBuilder吗?

Blo*_*ard 14

不,在声明它的情况下,性能方面无关紧要.

对于一般代码清洁度,您应该在使用它的最内部范围内声明它 - 即.你的第一个例子.

  • @NullUserException是的,你是对的.但是如果你在循环之外不需要它,那么在循环中声明它就更清楚了 (3认同)

Sco*_*hic 12

如果你这样写,你可能会获得一些表现:

StringBuilder sb = new StringBuilder();
foreach(Type item in myCollection)
{
   sb.Length = 0;
}
Run Code Online (Sandbox Code Playgroud)

因此,您必须仅将StringBuilder实例化一次并重置循环中的大小,这应该比实例化新对象稍快一些.

  • 它可能,但它也可能没有.当你调用`ToString`时,它会复制缓冲区.假设有任何理由认为它对性能敏感,我会对它进行基准测试. (2认同)