Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: CL | DM;

Вниз

Страшные тормоза при работе программы.   Найти похожие ветки 

 
Pavelkq   (2004-07-15 09:47) [0]

Написал программу, которая выполняется довольно долго (несколько часов). В основном это циклы по вызову функций из внешнего DLL и свяческой сортировки в массивах.
 При работе программы, работать с компом практически нельзя. Все жутко тормозит. Проц загружен на 80-90%. Про форму я тоже молчу, т.к. она просто висит, до самого конца программы.
 Чего это такое, как с этим боротся?


 
Sergey Kaminski   (2004-07-15 09:58) [1]

Не нужно с этим бороться. Плюнь. Ничего не выйдет. Очень серьезная ошибка.


 
begin...end ©   (2004-07-15 10:12) [2]


> Про форму я тоже молчу, т.к. она просто висит, до самого конца программы.

1. Поток ?
2. Application.ProcessMessages ?


 
begin...end ©   (2004-07-15 10:14) [3]

3. Улучшение алгоритма ? :-)


 
Sandman25 ©   (2004-07-15 10:17) [4]

4. Перепроектирование структур данных? :-)


 
begin...end ©   (2004-07-15 10:20) [5]

Короче, чтение книги "Алгоритмы + структуры данных = программы" :-)


 
Romkin ©   (2004-07-15 12:14) [6]

Дополнительный поток вряд ли поможет :))
А вот приоритеты понизить - можно.
Но я бы точно посмотрел, а что так долго-то?! Сортировка массива даже в гигабайт величиной идет очень быстро ;)


 
Sandman25 ©   (2004-07-15 12:17) [7]

[6] Romkin ©   (15.07.04 12:14)

Если приоритеты понизить, будет несколько дней работать :)
Если постоянно происходит пересортировка масссивов, то нужно было использовать список.


 
Anatoly Podgoretsky ©   (2004-07-15 12:22) [8]

Программу с исходниками стереть и переписать все нафиг


 
Sandman25 ©   (2004-07-15 12:24) [9]

[8] Anatoly Podgoretsky ©   (15.07.04 12:22)

Точно. Заодно реализовать и функциональность вызываемой DLL - может, это она так тормозит.


 
©   (2004-07-15 14:59) [10]

Поэтапно оптимизируй
имеющийся код, заменяя определенные тормозные моменты.
Для начала разбей программу на блоки проверки времени выполнения,
и начинай по итогу анализа оптимизацию.


 
Pavelkq   (2004-07-15 15:20) [11]

Что же если виноват код, т.е. я, то хотел бы углубиться в решение проблемы. Каждая итерация разбита на самостоятельные блоки, что и проще программировать и устойчивее к сбоям.
Алгоритм следующий:
1. Открывется документ в ворде.
2. Весь документ копируется в переменную, после чего ворд тут же закрывется.
3. Запускается цикл равный количеству символов вышеуказанной переменной. Задача этого цикла разбить переменную на отдельные слова по аналогии с тем, как это делает сам ворд (его функцию я не использую по причине ее тормозов в экспоненциальной прогрессии), разбитые символом #13. Иногда попадаются тексты очень крупные в несколько мегабайт. Естественно это тормоза, но быстрее чем вечность самого ворда.
4. Создается TStringList, в который запихивается данная переменная. (Очень удобно, что не надо самому разбивать на слова и пихать все это в массив.)
5. Теперь данный TStringList циклом переносится в обычный массив и освобождается.
6. В цикле происходит замена всех слов массива на нормализованные слова с помьщью DLL. (Надо отметить, что это самая быстрая часть программы.)
7. Открывается файл результатов (если нет, то создается) типа:

   type TIndex=record
       Lema : string[50];
       Index : Integer;

и все из него сыитывается в соответствующий массив.
8. Массив из п6. снова заносится в TStringList c удалением пустых строк.
9. TStringList сортируется.
10. Идет удаление дубликатов слов с подсчетом их количества. Все это заносится в массив типа TIndex (вышеуказанный).
11. Массив, полученный из файла в цикле и массив с результата обработки сумируются в TStringList и тут же сортируются.
(Надо отметить, что пришлось в TStringList пихать и Index каждого слова с помощью IntToStr).
12. Далее снова поиск дубликатов, но немного другой. Если дубликат есть, то их Index суммируется. Результаты тут же заносятся в массив типа TIndex. (тут снова геморой с Indexом, т.к. при сравнении его учитывать не надо).
13. Результат пересохраняется в файле.
14. Переходим к следующему вордовскому файлу.
 Вот такая петрушка. В рузультате в файле получается частотны словарь слов.
 Хочу отметить, что массив п.5 и п.8 создаются не случайно. Из TStringLista DLL работал не корректно.
 А теперь давайте, какие тут косяки?


 
Владислав ©   (2004-07-15 15:37) [12]

А не лучше ли дубликаты считать еще на этапе разбора файла на слова? И вроде как стринг лист останется один.


 
Anatoly Podgoretsky ©   (2004-07-15 16:05) [13]

Постоянная пересылка туда сюда много раз, с постоянным выделением памяти и копированием.
Надо пересматривать алгоритм



Страницы: 1 вся ветка

Текущий архив: 2004.08.01;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.057 c
14-1089968001
DimKa
2004-07-16 12:53
2004.08.01
За что Вам нравится данных сайт?


6-1086268814
Grey
2004-06-03 17:20
2004.08.01
Вопросы по Novell-у


14-1089979029
pavel_pavel
2004-07-16 15:57
2004.08.01
Билли


14-1089385460
dix
2004-07-09 19:04
2004.08.01
Использовать ли Базу данных


14-1089619301
Alone
2004-07-12 12:01
2004.08.01
Красота по Американски