Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена текста в строке независимо от регистра, Больно долго выполняется, посоветуйте... 
:(
    Опции темы
warcase
Дата 30.3.2009, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Здравствуйте. Пишу программу, которая заменяет в файлах текст, с одного на другой. Вот, есть код:
Код

                    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 дольше). Можете посоветовать, как это дело можно оптимизировать? Заранее благодарю!
PM MAIL   Вверх
mihryak
Дата 30.3.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



Цитата(warcase @  30.3.2009,  16:01 Найти цитируемый пост)
position = fileText.ToLower().IndexOf(OldText.ToLower(), position);

сходу - инварианты из цикла надо выносить всегда. какой смысл раз ра разом приводить всё к нижнему регистру?
Цитата(warcase @  30.3.2009,  16:01 Найти цитируемый пост)

                        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 секунду
вот полезная линка

Это сообщение отредактировал(а) mihryak - 30.3.2009, 15:34
PM MAIL ICQ   Вверх
warcase
Дата 30.3.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Благодарю! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1150 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.