C#StringsBenchmarks–RefactoringSpeed/Maintainability我自己的时间一直在修补小函数,试图找到重构它们的方法(我最近看了MartinFowler的书“重构:改进现有代码的设计”)。我在更新它附近的代码库的另一部分时发现了以下函数MakeNiceString(),它看起来是一个不错的选择。事实上,没有真正的理由去取代它,但它足够小并且做了一些小事所以很容易理解并且仍然有“良好”的体验。私有静态字符串MakeNiceString(stringstr){char[]ca=str.ToCharArray();字符串结果=空;诠释我=0;结果+=System.Convert.ToString(ca[0]);for(i=1;i<=ca.Length-1;i++){if(!(char.IsLower(ca[i]))){结果+="";}结果+=System.Convert.ToString(ca[i]);}返回结果;}staticstringSplitCamelCase(stringstr){string[]temp=Regex.Split(str,@"(?0){sb.Insert(m.Index+Incrementer,SPACE);递增器++;}}返回sb.ToString().TrimEnd();我的第一个重构是将方法的名称更改为更具描述性的名称。MakeNiceStringimo不是一个告诉我这个方法做什么的名字。PascalCaseToSentence怎么样?不喜欢这个名字,但它比MakeNiceString好。使用StringBuilder而不是串联。每个连接都在创建一个新的字符串实例并丢弃旧的。这是一个稍微优化的版本。我采纳了以前发帖者的建议,但也以块的方式附加到字符串生成器。这可能允许字符串生成器一次复制4个字节,具体取决于字的大小。我还删除了字符串赋值,并将其替换为str.length。静态字符串RefactoredMakeNiceString2(stringstr){char[]ca=str.ToCharArray();StringBuildersb=newStringBuilder(str.Length);int开始=0;for(inti=0;iregexforyoursolutionTheformulaversiondifferentsinresultfromtheoriginalcode.也许代码的较大上下文避免了它们不同的区域。原始代码将为任何非小写字母添加空格特点。例如,“ThisIsATest”在原始版本中会变成“ThistIsATest”,但“ThisIsATest”与Regex版本相同。(?是你想要更接近的模式,但即便如此它也会忽略i18n的问题。应该注意以下模式:(?在C#(.Net,真的)中,当你附加一个字符串时,背景会发生一些事情。现在,我忘记了详细信息,但它是这样的:StringA=B+C;A+=D;A+=E;//...对上面的每一行重复10,000次迭代,.NET将:1)分配一些新内存对于A。2)将字符串B复制到新内存中。3)扩充内存保留C。4)将字符串C追加到A,字符串A越长,需要的时间越长。除此之外,你做的越多,A得到的时间就越长,花费的时间也就越长。但是,对于StringBuilder,您不会分配新内存,因此您可以跳过该问题。如果你说:StringBuilderA=newStringBuilder();A.追加(B);A.追加(C);//..冲洗/重复10,000次...stringsA=A.ToString();StringBuilder(编辑:固定描述)内存中有一个字符串。它不需要为每个添加的子字符串重新分配整个字符串。发出ToString()时,字符串已经以正确的格式附加。一次拍摄而不是一个循环,需要更长的时间。我希望这有助于回答为什么花费更少的时间。以上就是C#学习教程:StringBenchmarkinC#–RefactoringSpeed/Maintainability分享,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注---这篇文章吧整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
