Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AnsiString, "+=" и Memo... тормоза! 
:(
    Опции темы
BreakPointMAN
  Дата 11.9.2005, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Трабла такая... программно нужно сформировать текст и поместить его в Memo... как сие организовать с наименьшими тормозами? Код представляет собой грубо упрощенно такой цикл:
Код

   AnsiString t=""; 
   int max=100000;
   for(int i=0; i<max; i++)
      {
       t+=(IntToStr(i)+"   "+IntToStr(i)+"\r\n");
      }

с каждой итерацией тормозит все сильнее и сильнее...


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
BreakPointMAN
Дата 11.9.2005, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну ясен хрен... а что же я хотел... итак накладных расходов на постоянное увелечени строки, так еще... мдя...
Код

   AnsiString t=""; 
   int max=100000;
   AnsiString tmp;
   for(int i=0; i<max; i++)
      {
       tmp=(IntToStr(i)+"   "+IntToStr(i)+"\r\n");
       t+=tmp;
      }



--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
JackYF
Дата 12.9.2005, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



лучше сформируй char* массив:
запомни начальную позицию,
а потом с каждой итерацией указатель инкрементируй на какое-то число (какое-решай сам).
Добавление организуй строковыми функциями, а затем восстанови указатель и переведи потом в AnsiString. Если не очень понятно, могу (потом) написать поподробнее...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
JackYF
Дата 12.9.2005, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Все, дошел до решения:

Код

char* t=new char[10000000];
   t[0]='\0';
   char* m=t;
   long max=100000;
   AnsiString tmp;
   for(long i=0; i<max; i++)
   {
      tmp=(IntToStr(i)+"   "+IntToStr(i)+"\r\n");
      strcat(t,tmp.c_str());
      t+=tmp.Length();
   }
   AnsiString result=m;
   t=m;
   delete [] t;


Вроде все работает. У меня (Athlon 2500+) -- около секунды. Устраивает?
Добавлено @ 00:04
Пардон, у тебя второй текст программы - то же самое...
Извиняюсь...

Только никак не могу понять - чем же принципиально отличаются твои 2 варианта?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Mayk
Дата 13.9.2005, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(JackYF @ 13.9.2005, 03:55)
tmp=(IntToStr(i)+"  "+IntToStr(i)+"\r\n");
      strcat(t,tmp.c_str());

Я б sprintf использовал. Чтоб сразу в t строку писать числа:
Код

t+=sprintf(t,"%d  %d\n",i,i);

Кстати, в примере JackYF вместо strcat'а надо использовать strcpy. Иначе ой - массив то не занулен, и в любой момент времени в t содержится любой содержимое. К которому strcat и будет прибавлять.

Это сообщение отредактировал(а) Mayk - 13.9.2005, 06:29


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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