(抱歉,这是确定字符串长度是否为 0 的最有效方法的第二篇文章?但我不知道如何回复人们的答案,我的回复被发布为“答案”)
理想情况下,我正在寻找的是执行以下操作的最有效算法(将被称为 1 亿次以上)。我正在使用 C# 4.0
将字符串:“ABCDE”转换为数组:string["A","B","C","D","E"]
我的算法如下:
public string[] SplitOnMultiSpaces(string text)
{
if (string.IsNullOrEmpty(text)) return new string[0];
var split = text.Split(' ');
int length = split.Length;
var data = new string[length];
int index = 0;
for (int i = 0; i<length; i++)
{
if (split[i].Length != 0)
{
data[index++] = split[i];
}
}
return data;
}
我的问题是,当我针对 100,000 个字符串进行分析时,执行需要 1.04 秒。
如果我注释掉“if (split[i].Length != 0)”检查,只需要 0.2 秒。
谁能告诉我为什么对字符串的这个(简单)查询占用了总执行时间的 80%?(特别是,因为我希望其他领域使用更多的 CPU)我想出的唯一想法是 C# 试图计算字符串长度,人们告诉我不是这样(我猜它更像是 VB 字符串?)。但这对于时间开销来说是没有意义的。
我考虑过尝试查看 split[i][0] 是否存在,但是依靠异常会减慢 WAAAAAAY 的速度。
PS——我的算法也受到影响,因为返回的数组通常比它需要的大,但这似乎并没有太大的开销。