(我的道歉,这是第二个帖子Most efficient way to determine if a string length != 0?但我无法弄清楚如何回答别人的答案,我的答复变成张贴的“答案”)C#4.0,确定字符串长度!= 0的最有效方法?第2部分
理想情况下,我在寻找什么因为是进行以下操作的最有效的算法(将被称为1亿次+)。我使用C#4.0
转动字符串: “ABCDE” 到阵列: 字符串[ “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;
}
我的问题是,当我资料这个反对100000个字符串,它需要1.04秒执行。
如果我注释掉“if(split [i] .Length!= 0)”检查,则只需要0.2秒。
有人可以告诉我为什么这个(简单)查询对字符串采取80%的TOTAL执行时间? (特别是,因为我期望其他地区使用更多的CPU)我唯一的想法是C#正在试图计算字符串长度,人们告诉我不是这种情况(它更像VB字符串我猜?)。但是这对于时间开销是没有意义的。
我考虑试图看看split [i] [0]是否存在,但依靠异常会减慢WAAAAAAY的效果。
P.S. - 我的算法还受到这样的影响,返回的数组通常比所需要的大,但这似乎不是太大的开销。
出于好奇,如果你关心速度,为什么你使用C#? C++或C可能会让你显着提高速度。 – riwalk 2010-08-02 18:34:18
当您对其进行配置时,请确保Visual Studio未附加。它可能突然变得快了很多倍。 (或者它可能不会,那真的取决于。) – 2010-08-02 18:34:20
要回复你需要点击人员下面的小'添加评论'链接 – 2010-08-02 18:34:25