Я работаю над пользовательским элементом управления texteditor и столкнулся с этой проблемой.
Мне нужна функция, которая получает символьные индексы для каждой новой строки "\ n" в тексте.У меня уже есть два способа добиться этого:
private List<int> GetNewLineLocations()
{
var list = new List<int>();
int ix = 0;
foreach (var c in this.Text)
{
if (c == '\n') list.Add(ix);
ix++;
}
Debug.WriteLine(ix);
return list;
}
И:
private List<int> GetNewLineLocations()
{
var list = new List<int>();
int ix = -1;
for (int i = 0; i < this.Lines.Length; i++)
{
ix += Lines[i].Length;
ix += 1;
list.Add(ix);
}
return list;
}
Первое решение работает, но замедляется, когда в richtextbox вводится больше текста, который составляет около 40000 символов.но это может быть разбросано по множеству строк, например 20000.
Второй кажется более быстрым, потому что он делает петли меньше и делает более или менее то же самое, но резко замедляется на 1000 строк, неважно насколькотекст, который они содержат.
Конечно, код должен работать быстро и не использовать много ресурсов, поэтому я подумал, что второе решение будет лучше.
Мой вопрос:
Какое решение лучше и почему?
Почему второе решение намного медленнее?
Есть ли еще лучшее решение?