Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9

Оптимизация кода

04.03.2015, 20:42. Показов 2858. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Исходный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//////разбор////
String html_data =_T("");
innerRe->ModifierM = true;
innerRe->Expression = _T("<script(.*?)</script>");
innerRe->Compile();
if(innerRe->Exec(List->Text))
{
 html_data = innerRe->Replace(innerRe->InputString, _T(""), false);
}
List->Clear();
 
_di_DispHTMLDocument Doc = CoHTMLDocument::Create();
IHTMLDocument2 *HTMLDoc = NULL;
Doc->QueryInterface<IHTMLDocument2>(&HTMLDoc);
 
Variant v;
v = VarArrayCreate( OPENARRAY( int, ( 0, 0 ) ), varVariant );
v.PutElement(html_data, 0);
HTMLDoc->write(PSafeArray(TVarData(v).VArray));
HTMLDoc->close();
 
innerRe->Expression = _T("(\\s*[а-яА-Я]{4,})");
innerRe->Compile();
//тут был TStringList *sL = new TStringList;
_di_IHTMLElementCollection allColl;
HTMLDoc->Get_all(allColl);
if(allColl)
{
 int allLength;
 allColl->Get_length(allLength);
 for(int i = 0; i < allLength; i++)
  {
   _di_IDispatch pDisp;
   if(SUCCEEDED(allColl->item(Variant(i), Variant(0), pDisp)))
   {
    IHTMLElement *pElement = 0;
    if(SUCCEEDED(pDisp->QueryInterface(IID_IHTMLElement, (LPVOID*)&pElement)))
    {
     WideString sTag;
     pElement->Get_tagName(sTag);
     if(sTag == _T("P") || sTag == _T("LI"))
     {
      WideString inner;
      pElement->Get_innerText(inner);
      if(innerRe->Exec(inner))
      {
       sL->Clear();
       innerRe->Split(innerRe->InputString, sL);
       if(sL->Count > 10)
       {
        Listok->Add(String().sprintf(_T("<%s>%s</%s>"),
        sTag.c_bstr(), inner.c_bstr(), sTag.c_bstr()));
       }
      }
     }
    }
   }
  }
 }
///====
Проблема в том, что с этим кодом программа начинает очень много есть памяти.
Попытался решить проблему,переписав код так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 TStringList* List = new TStringList(); // для страницы сайта
 TRegExpr *innerRe = new TRegExpr();
 TStringList *Listok = new TStringList(); // для готовой текстовки
 TStringList *sL = new TStringList();
 String html_data =_T("");
 int allLength;
 _di_IHTMLElementCollection allColl;
 Variant v;
 _di_DispHTMLDocument Doc = CoHTMLDocument::Create();
 IHTMLDocument2 *HTMLDoc = NULL;
 IHTMLElement *pElement = 0;
 WideString sTag;
 WideString inner;
 _di_IDispatch pDisp;
...
...
//////разбор////============================================================
innerRe->ModifierM = true;
innerRe->Expression = _T("<script(.*?)</script>");
innerRe->Compile();
if(innerRe->Exec(List->Text))
{
 html_data = innerRe->Replace(innerRe->InputString, _T(""), false);
}
List->Clear();
Doc->QueryInterface<IHTMLDocument2>(&HTMLDoc);
 
v = VarArrayCreate( OPENARRAY( int, ( 0, 0 ) ), varVariant );
v.PutElement(html_data, 0);
HTMLDoc->write(PSafeArray(TVarData(v).VArray));
HTMLDoc->close();
 
innerRe->Expression = _T("(\\s*[а-яА-Я]{4,})");
innerRe->Compile();
HTMLDoc->Get_all(allColl);
if(allColl)
{
 allColl->Get_length(allLength);
 for(int i = 0; i < allLength; i++)
  {
   if(SUCCEEDED(allColl->item(Variant(i), Variant(0), pDisp)))
   {
    if(SUCCEEDED(pDisp->QueryInterface(IID_IHTMLElement, (LPVOID*)&pElement)))
    {
     if(sTag == _T("P") || sTag == _T("LI"))
     {
      pElement->Get_innerText(inner);
      if(innerRe->Exec(inner))
      {
       sL->Clear();
       innerRe->Split(innerRe->InputString, sL);
       if(sL->Count > 10)
       {
        Listok->Add(String().sprintf(_T("<%s>%s</%s>"),
        sTag.c_bstr(), inner.c_bstr(), sTag.c_bstr()));
       }
      }
     }
    }
   }
  }
 }
 html_data =_T("");
 sL->Clear();
 innerRe->InputString = "";
 allColl = NULL;
 v = NULL;
 //Doc = NULL;
 HTMLDoc = NULL;
 pElement = 0;
 inner = NULL;
 sTag = NULL;
 pDisp = NULL;
///=================================
Но все равно - расход памяти такой же.
Данный код выполняется в цикле.
Скажите,пожалуйста,что в данном коде может так сильно расходовать память.
Изображения
 
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.03.2015, 20:42
Ответы с готовыми решениями:

Оптимизация кода
Приветствую всех. Посмотрите на нижеприведенный код. Возможно ли сделать его проще (например без использования AnsiString и/или цикла)? ...

Оптимизация кода
Вот решил написать что то на подобии &quot;Напоминания события&quot;!))) Вот код: ...

Оптимизация кода
У меня в программе обилие циклов, внутри них в основном расчеты и работа с массивами. Имеет ли смысл производить ассемблерные вставки в...

25
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,040
Записей в блоге: 12
11.03.2016, 18:10
Студворк — интернет-сервис помощи студентам
10 запусков сделал, с интервалами. Ни единого вяка, все прекрасно работает, только для https я добавил TIdSSLIOHandlerSocketOpenSSL на форму, и связал его с IdHttp1.IOHandler (ну и две DLL-ки, как положено, в папку с проектом скопировал).
1
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
11.03.2016, 18:26  [ТС]
volvo, поделитесь проектом.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,040
Записей в блоге: 12
11.03.2016, 19:07
Вот проект (вместе с DLL-ками, с которыми у меня отработало):
Вложения
Тип файла: 7z my_fail_projectXE2_2016_03_11.7z (653.9 Кб, 4 просмотров)
1
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
11.03.2016, 19:22  [ТС]
volvo, я в шоке! Ошибка появляется все равно
Кстати, чисто теоретически, настройки internet explorer могут повлиять на работоспособность приложения?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,040
Записей в блоге: 12
11.03.2016, 20:09
Не знаю, я Explorer-ом не пользуюсь, про его настройки не в курсе. Сам ничего не выставлял никогда специально, как было из коробки, так и стоит. Я по-моему, его и не запускал ни разу за все время
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
13.03.2016, 13:07  [ТС]
Ошибка исчезла также внезапно, как я появилась
И слава богу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.03.2016, 13:07

ListView и правильность\оптимизация кода
Приветствую всех. Вопросов несколько: 1. Запутался с последовательностью выполнения команд 2. Как записать результат проверки в...

Оптимизация кода под С++ Builder 6
Уважаемые эксперты помогите передалать код программ под С++ Builder 6 в его консольный режим из простого С++ условие программ:...

Сортировка, оптимизация кода в Builder 2010
Здравствуйте, уважаемые знатоки! Имеется ли функция в Builder 2010, которая приводит в небольшой порядок исходный код? Например код в...

StringGrid (Оптимизация кода) - Загрузка и Сохранение
Добрый день! Для сохранения StringGrid в файл использую TStringList *Table = new TStringList; for(int i = 0...

Игра, подобная шашкам. Оптимизация кода
Добрый вечер. У меня маленькая проблема: пишу игру, наподобие шашек. Почти готово, потом выложу исходники для критики. Сейчас делаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru