(Мои извинения, это второй пост для наиболее эффективного способ определить, является ли длина строки != 0?, но я не могу понять, как отвечать на ответы людей, мой ответ публикуется как «ответ»)
В идеале я ищу наиболее эффективный алгоритм для выполнения следующего (который будет вызываться более 100 миллионов раз). Я использую С# 4.0
Превратите строку: "A B C D E" в массив: 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% ОБЩЕГО времени выполнения? (Особенно, поскольку я ожидал, что другие области будут использовать больше ЦП). Единственная идея, которую я придумал, - это С#, пытающийся подсчитать длину строки, что, как мне говорят, не так (что это больше похоже на строки VB, я думаю ?). Но это не имело бы смысла для накладных расходов времени.
Я думал попытаться увидеть, существует ли split[i][0], но использование исключения замедляет работу WAAAAAAY.
P.S. -- Мой алгоритм также страдает тем, что возвращаемый массив чаще всего больше, чем должен быть, но это не кажется слишком большим накладным расходом.