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