Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для Михаил Марюфич
15 / 15 / 5
Регистрация: 29.03.2011
Сообщений: 144

Долго выполняется код.

09.05.2011, 21:30. Показов 1990. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане, почему у меня тормозит этот немудреный код, хотя в листбоксе всего 490 строк, и как сделать его быстрее?
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
Variant v;
 if(!fStart){
   vVarApp=CreateOleObject("Word.Application");
   fStart=true;}
 
vVarApp.OlePropertySet("Visible",false);
vVarDocs=vVarApp.OlePropertyGet("Documents");
vVarDocs.OleProcedure("Add");
vVarDoc=vVarDocs.OleFunction("Item",1);
vVarParagraphs=vVarDoc.OlePropertyGet("Paragraphs");
str="Список отсутствующих:";
vVarParagraphs.OleProcedure("Add");
vVarParagraph=vVarParagraphs.OleFunction("Item",1);
vVarParagraph.OlePropertyGet("Range").
              OlePropertySet("Text",str.c_str());
              vVarParagraph.OlePropertySet("Alignment",0);
v=vVarParagraph.OlePropertyGet("Range").
                OlePropertyGet("Font");
v.OlePropertySet("Name","Tahoma");
v.OlePropertySet("Size",15);
int j=2;
for(int y=0;y<i;y++){
str=ListBox2->Items->Strings[y];
vVarParagraphs.OleProcedure("Add");
vVarParagraph=vVarParagraphs.OleFunction("Item",j);
vVarParagraph.OlePropertyGet("Range").
              OlePropertySet("Text",str.c_str());
              vVarParagraph.OlePropertySet("Alignment",0);
v=vVarParagraph.OlePropertyGet("Range").
                OlePropertyGet("Font");
v.OlePropertySet("Name","Tahoma");
v.OlePropertySet("Size",15);
             j++;}
str="Количество отсутствующих:"+AnsiString(i);
vVarParagraphs.OleProcedure("Add");
vVarParagraph=vVarParagraphs.OleFunction("Item",j);
vVarParagraph.OlePropertyGet("Range").
              OlePropertySet("Text",str.c_str());
              vVarParagraph.OlePropertySet("Alignment",1);
              v=vVarParagraph.OlePropertyGet("Range").
              OlePropertyGet("Font");
v.OlePropertySet("Name","Tahoma");
v.OlePropertySet("Size",15);
AnsiString Save="c:\\Отчеты\\"+DateForTable+"-отчет.doc";
Form1->Caption=Save;
vVarDoc=vVarDocs.OleFunction("Item",1);
vVarDoc.OleProcedure("SaveAs",Save.c_str());
Никто не знает как программно распечатать вордовсий документ, лежащий в папке C:\12???
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.05.2011, 21:30
Ответы с готовыми решениями:

Программа долго выполняется
Добрый день, товарищи. Написал прогу, кодирующую данные#include &lt;iostream&gt; #include&lt;fstream&gt; #include&lt;string&gt; using...

Долго выполняется цикл
Добрый день или вечер)) Есть цикл for, который выполняется в потоке. Он занимается заполнением структуры. В этом цикле for...

Код не выполняется в одном месте, но выполняется в другом
Вот код процедуры: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; ...

7
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
10.05.2011, 03:03
Михаил Марюфич,
Ну да, а как вы запихнули в лист боксе 490 строк?!
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
10.05.2011, 06:01
Попробуй выводить в ListBox с помощью ListBox1->Items->Text, а текст накапливать в char*.

Не советую в AnsiString накапливать, с увеличением текста он начинает медленно накапливаться. Вот пример, когда он становится очень медленным:
C++
1
2
3
4
5
    AnsiString Text = "";
        for ( int i = 0; i < 999999; i++ )
        {
            Text += "abc";
        }
Тоже самое, но с использованием char* выполнится мгновенно:
C++
1
2
3
4
5
6
7
        char *Text = new char[3000000];
        int count = 0;
        for ( int i = 0; i < 999999; i++ )
        {
            strcpy(&Text[count], "abc");
                count += 3;
        }
0
 Аватар для Михаил Марюфич
15 / 15 / 5
Регистрация: 29.03.2011
Сообщений: 144
10.05.2011, 13:55  [ТС]
Ну да, а как вы запихнули в лист боксе 490 строк?!
Циклом.
Попробуй выводить в ListBox с помощью ListBox1->Items->Text, а текст накапливать в char*.

Не советую в AnsiString накапливать, с увеличением текста он начинает медленно накапливаться. Вот пример, когда он становится очень медленным:
Так текст же в вордовском документе постепенно накапливается, я его туда по строчке вбиваю
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
10.05.2011, 15:36
Цитата Сообщение от Programmer. Посмотреть сообщение
Ну да, а как вы запихнули в лист боксе 490 строк?!
490 - это ерунда! Вот 1000000 - это проблема, хотя я работал в Мемо и с таким количеством.
Все строки хранятся в виртуальной памяти,
допустим, если виртуалки 2 гига, то пока не будет занято 1.5-1.7 всё будет бодро, потом
пойдут тормоза, а потом будет предел.

Тормоза скорее всего из-за взаимодействия с самим Вордом, ведь всё это работает через COM,
это дополнительные накладные расходы.

А если кровь из носу надо проверить, где именно происходят тормоза, можно замерить выполнение
каждой операции

C++
1
2
3
4
5
6
7
8
#include <ctime>
clock_t a, b;
a = clock();
// выполняемая функция
f();
b = clock();
// обработка разницы
ShowMessage((b-a)/CLOCKS_PER_SEC);
И правильно kzru_hunter написал, при большом кол-ве строк лучше присваивать их все сразу,
так как при добавлении их по-очереди тратится время на отрисовку.
Проверь, нет ли у листбокса BeginUpdate - EndUpdate, я просто не помню.
Если у компонентов есть вышеуказанные свойства, то надо пользоваться ими при изменении данных
1
 Аватар для Михаил Марюфич
15 / 15 / 5
Регистрация: 29.03.2011
Сообщений: 144
10.05.2011, 16:04  [ТС]
А как все сразу заполнить я в статье нашел только по параграфам заполнять(http://wladm.narod.ru/Borland/word.html#1), если как-то быстрее можно, то подскажите, а то это не дело 30 секунд программа,как зависла.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
10.05.2011, 16:09
Цитата Сообщение от Михаил Марюфич Посмотреть сообщение
то подскажите, а то это не дело 30 секунд программа,как зависла.
Я вообщето для этих целей делал индикатор процесса, а вверху процентики и всё. Чтобы пользователь не думал, что программа зависла.
0
 Аватар для Михаил Марюфич
15 / 15 / 5
Регистрация: 29.03.2011
Сообщений: 144
10.05.2011, 16:18  [ТС]
Я вообщето для этих целей делал индикатор процесса, а вверху процентики и всё. Чтобы пользователь не думал, что программа зависла.
А как это сделать можно.
И не знаю все равно как-то медленно, это как-то плохо, нельзя ли как-нибудь побыстрее в ворд записывать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.05.2011, 16:18
Помогаю со студенческими работами здесь

Как сделать, чтобы ОС не прерывала выполнение функции, которая выполняется долго
Сортировка с отображением этого процесса в окне. Примерно через пять секунд программа виснет, процесс сортировки уже отображается, а сама...

Код очень долго выполняется, нужно сократить работу по времени
Анагра́мма (от греч. ανα- — «пере» и γράμμα — «буква») — литературный приём, состоящий в перестановке букв или звуков определённого слова...

Интегрирование заданной функции тремя способами - код выполняется слишком долго
Добрый вечер! Надо сделать лабораторную работу по численным методам. Результат верный, но программа выполняется оооочень долго. Цель работы...

Долго выполняется подключение к БД
Добрый день. Временами долго выполняется подключение? Раз в час может быть и чаще. Есть класс thread_action унаследованный от класса...

Долго выполняется запрос
Приходят в GET слова для работы с БД, все работает хорошо, кроме одного словочитания, база данных возвращает значения, но это происходит...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru