Замена текста в строке независимо от регистра

Здравствуйте. Пишу программу, которая заменяет в файлах текст, с одного на другой. Вот, есть код:
                    if (!Register)                    {                        fileText = fileText.Replace(OldText, NewText);                    }                    else                    {                        int position = 0;                        List<int> positions = new List<int>();                        int positionLag = 0;                        while (position >= 0)                        {                            position = fileText.ToLower().IndexOf(OldText.ToLower(), position);                            if (position >= 0)                            {                                positions.Add(position);                                position++;                            }                        }                        foreach (int pos in positions)                        {                            fileText = fileText.Remove(pos + positionLag, OldText.Length);                            fileText = fileText.Insert(pos + positionLag, NewText);                            positionLag = positionLag + NewText.Length - OldText.Length;                        }                    }
где, если Register == true, то выполняется замена текста без зависимости от регистра символов. Но, этот алгоритм выполняется, мягко говоря, довольно долго (при больших объемах текста по сравнению с String.Replace() в раз 15 дольше). Можете посоветовать, как это дело можно оптимизировать? Заранее благодарю!
2 ответа

position = fileText.ToLower().IndexOf(OldText.ToLower(), position);
сходу - инварианты из цикла надо выносить всегда. какой смысл раз ра разом приводить всё к нижнему регистру?
                        foreach (int pos in positions)                        {                            fileText = fileText.Remove(pos + positionLag, OldText.Length);                            fileText = fileText.Insert(pos + positionLag, NewText);                            positionLag = positionLag + NewText.Length - OldText.Length;                        }
перейди на использование StringBuilderнатрави на текст профайлер, посмотри, где провисания, многое сразу станет ясноДобавлено через 5 минут и 31 секундувот полезная линка


Благодарю!