我写了下面的函数publicvoidTestSB(){stringstr="Thequickbrownfoxjumpsoverthelazydog.";StringBuildersb=newStringBuilder();intj=0;intlen=0;try{for(inti=0;i现在我想,StringBuilder有能力处理超过20亿个字符(准确地说是2,147,483,647)。但是当我运行上面的函数时,它在达到大约8亿的容量时给出了System.OutOfMemoryException。此外,我在具有相同内存和相似负载量的不同PC上看到了截然不同的结果。谁能提供或解释一下这是
我写了下面的函数publicvoidTestSB(){stringstr="Thequickbrownfoxjumpsoverthelazydog.";StringBuildersb=newStringBuilder();intj=0;intlen=0;try{for(inti=0;i现在我想,StringBuilder有能力处理超过20亿个字符(准确地说是2,147,483,647)。但是当我运行上面的函数时,它在达到大约8亿的容量时给出了System.OutOfMemoryException。此外,我在具有相同内存和相似负载量的不同PC上看到了截然不同的结果。谁能提供或解释一下这是
如果我在方法中使用StringBuilder对象构建字符串,是否有意义:返回StringBuilder对象,让调用代码调用ToString()?returnsb;或者自己调用ToString()返回字符串。returnsb.ToString();我想如果我们返回小字符串或大字符串会有所不同。在每种情况下什么是合适的?提前致谢。编辑:我不打算进一步修改调用代码中的字符串,但ColinBurnett说得好。主要是返回StringBuilder对象效率高还是返回字符串效率高?会返回对字符串的引用还是副本? 最佳答案 如果要进一步修改字符串
如果我在方法中使用StringBuilder对象构建字符串,是否有意义:返回StringBuilder对象,让调用代码调用ToString()?returnsb;或者自己调用ToString()返回字符串。returnsb.ToString();我想如果我们返回小字符串或大字符串会有所不同。在每种情况下什么是合适的?提前致谢。编辑:我不打算进一步修改调用代码中的字符串,但ColinBurnett说得好。主要是返回StringBuilder对象效率高还是返回字符串效率高?会返回对字符串的引用还是副本? 最佳答案 如果要进一步修改字符串
我有一个循环,我在其中根据特定条件创建一些字符串值。我确实将StringBuilder对象放在循环之外,每次我在循环中有新行时,我都需要清除该行的StringBuilder附加值。我如何清除那些?StringBuildersb=newStringBuilder();foreach(DataRowrowinrecipientsList.Rows){sb.Length=0;sb.Append("");if(row["needsToActivate"]=="1"){sb.AppendFormat("{0}",getUsersWithoutActivationTemplate());}if(r
我有一个循环,我在其中根据特定条件创建一些字符串值。我确实将StringBuilder对象放在循环之外,每次我在循环中有新行时,我都需要清除该行的StringBuilder附加值。我如何清除那些?StringBuildersb=newStringBuilder();foreach(DataRowrowinrecipientsList.Rows){sb.Length=0;sb.Append("");if(row["needsToActivate"]=="1"){sb.AppendFormat("{0}",getUsersWithoutActivationTemplate());}if(r
我发现编译器将常量字符串表达式的串联优化为一个字符串。现在只有在运行时才知道字符串的字符串串联,为什么编译器不优化循环中的字符串串联和10个以上字符串的串联,而是使用StringBuilder.Append?我的意思是,这是可能的,对吧?实例化一个StringBuilder并进行每次连接并将其转换为Append()调用。有什么理由可以或不优化?我错过了什么? 最佳答案 肯定的答案必须来自编译器设计团队。但是让我在这里试一试......如果你的问题是,为什么编译器不转这个:strings="";for(inti=0;i进入这个:Str
我发现编译器将常量字符串表达式的串联优化为一个字符串。现在只有在运行时才知道字符串的字符串串联,为什么编译器不优化循环中的字符串串联和10个以上字符串的串联,而是使用StringBuilder.Append?我的意思是,这是可能的,对吧?实例化一个StringBuilder并进行每次连接并将其转换为Append()调用。有什么理由可以或不优化?我错过了什么? 最佳答案 肯定的答案必须来自编译器设计团队。但是让我在这里试一试......如果你的问题是,为什么编译器不转这个:strings="";for(inti=0;i进入这个:Str
什么是在不调用ToString().Trim()的情况下从StringBuilder的末尾修剪空白并返回到新的SBnewStringBuilder(sb.ToString().Trim())。 最佳答案 下面是一个扩展方法,可以这样调用:sb.TrimEnd();此外,它还返回SB实例,允许您链接其他调用(sb.TrimEnd().AppendLine())。publicstaticStringBuilderTrimEnd(thisStringBuildersb){if(sb==null||sb.Length==0)returnsb
什么是在不调用ToString().Trim()的情况下从StringBuilder的末尾修剪空白并返回到新的SBnewStringBuilder(sb.ToString().Trim())。 最佳答案 下面是一个扩展方法,可以这样调用:sb.TrimEnd();此外,它还返回SB实例,允许您链接其他调用(sb.TrimEnd().AppendLine())。publicstaticStringBuilderTrimEnd(thisStringBuildersb){if(sb==null||sb.Length==0)returnsb