为发布.Net Core 2.1版本而编辑
针对.Net Core 2.1版本的测试结果如下:
1000000次“Concat”操作耗时842毫秒。
1000000次“new String”操作耗时1009毫秒。
1000000次“sb”操作耗时902毫秒。
简而言之,如果您使用的是.Net Core 2.1或更高版本,则Concat
操作最佳。
有关更多详细信息,请参见微软博客文章。
我已将这个问题作为另一个问题,但越来越多的人认为那是这个问题的直接答案。
我对将IEnumerable<char>
转换为string
的3种简单方法进行了性能测试,这些方法如下:
new string
return new string(charSequence.ToArray());
连接
return string.Concat(charSequence)
字符串构建器
var sb = new StringBuilder();
foreach (var c in charSequence)
{
sb.Append(c);
}
return sb.ToString();
在我的测试中,详细描述在链接的问题中,对于"一些相当小的测试数据"
的1000000次迭代,我得到了如下结果:
1000000次"Concat"迭代花费1597毫秒。
1000000次"new string"迭代花费869毫秒。
1000000次"StringBuilder"迭代花费748毫秒。
这使我认为,在这个任务中没有使用string.Concat
的好理由。如果你想要简单性,请使用new string方法;如果你想要更好的性能,请使用StringBuilder。
我需要注意的是,实际上所有这些方法都可以正常工作,这可能只是过度优化。
inputString.Intersect(allowedChars)
。 - Tim SchmelterHashSet<char>
吗?我亲身学习了它如何提高性能。它将处理文件的时间从 34 秒缩短到了 4 秒。 - Scott Chamberlain