Автор | Сообщение |
|
| |
Пост N: 1
Зарегистрирован: 19.07.09
|
|
Отправлено: 19.07.09 16:21. Заголовок: Непонятное резкое замедление работы программы
WinXP Clipper 5.1+Blinker 6. В цикле читаю текстовые файлы и ищу соответствие данных с данными в dbf. По ходу работы вывожу на экран счетчик и проверяю inkey() нажатие любой клавиши. Через некоторое время работа программы резко, в разы замедляется, причем при каждом запуске при обработке разных файлов, иногда может очень быстро обработать 5 файлов, иногда 10 и т.д. Подскажите, пожалуйста, в чем может быть причина и как с ней бороться.
|
|
|
Ответов - 5
[только новые]
|
|
|
| постоянный участник
|
Пост N: 349
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.07.09 13:20. Заголовок: Лишь могу предположи..
Лишь могу предположить, что одна из возможных причин, что в программе идет работа со строками данных, которые выделяются в виртуальной памяти, а работа системы виртуальной памяти в Clipper замедляет работу программы. То есть вопрос связан с тем, сколько одновременно в блоке кода используется строк
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 20.07.09 19:27. Заголовок: Замедление обработки
Нет сведений: 1) сетевая среда или локальный диск компа 2) замедление + ускорение равно(?) в среднем - времени чтения,копирования файлов вне программы (файловым менеджером) 1) Если есть ннтивирус - он может "долго" проверять часть "текстовых файлов", что читает программа. Можно отключить антивирусу - проверку на определенные файлы 2) Возможно, кешируется чтение диска или запись (добавить памяти). 3) Можно посмотреть что делает программа/система в моменты замедления - утилитами SYSINTERNALS Diskmon PROCMON
|
|
|
|
| постоянный участник
|
Пост N: 131
Зарегистрирован: 24.09.05
|
|
Отправлено: 02.11.09 14:03. Заголовок: Во время работы прог..
Во время работы программы нажми ALT и убедись, что она начинает работать быстро Замедление происходит потому, что ты используешь функцию разгрузки процессора в режиме ожидания типа NTIdle() или нечто аналогичное, которая во время считывания кнопки клавиатуры передает управления операционной системе, чтобы она могла делать свои дела ПОсколько в цикле ты постоянно вызываешь inkey(), это интерпретируется как простой решение 1. - отключать на время работы функцию разгрузки систему, если библиотечный модуль для разгрузки системы имеет соответствующие функции (мне такие модули неизвестны, кроме моего собственного) решение 2. проверять нажатие кнопки не чаще 1 раза в секунду (2 раза/сек уже может снизить производительность). для этого необходимо будет использовать постоянный вызов seconds(), что в XP вызывает торможение всех остальных программ. Т.е. функцию seconds() надо менять на нечто своё
|
|
|
|
| |
Пост N: 2
Зарегистрирован: 16.12.09
|
|
Отправлено: 16.12.09 16:02. Заголовок: Посмотри на http://n..
Посмотри на http://nova-mir.narod.ru В Clipper есть много тонкостей Cкачай там демо, а в них прочитай все Read.me и в демо-примере раздел "Комментарии" Там написано, что можно ускорить работу Clipper-программ, особенно в XP Но лучше почитай сам, потому что когда другие показывают как поет Карузо у них все-равно так не получается
|
|
|
|
| |
Пост N: 3
Зарегистрирован: 01.01.10
|
|
Отправлено: 01.01.10 22:15. Заголовок: Можно посоветовать з..
Можно посоветовать заменить INKEY() на INKEY(.1) - это для того чтобы не перегревался камень (CPU) и система ACPI не снижала "обороты" для защиты от перегрева процессора. Также можно посоветовать перейти с платформы 16-разрядного DOS-приложения (классический Clipper 5.xx) на платформу 32-разрядного консольного Windows-приложения (xHarbour 1.0.0 или более поздний) с плоской моделью (flat) памяти и неограниченными по длине символьными строками. Не советую использовать Blinker, лучше EXOSPACE (версии 1.0g) в комплексе с Clipper Tools 3.0c и собственно Clipper 5.2e - комбинация проверенная! Пример скрипта для компоновки с EXOSPACE (взято из реальной задачи): EXO PAC DOS25,NOVM # пакеты abs disk r/w (INT25) & NO Virtual Memory OU mainprog # главная программа FI mainprog # главная программа LI exospace # для перебивки стандартных библиотек идущих следом LI clipper # std lib LI extend # std lib LI terminal # std lib LI dbfntx # or other RDD driver lib LI ctp # Clipper Tools (protected mode) Также можно посоветовать проиндексировать .dbf файл в соответствии с нуждами поиска и искать в нем не LOCATE FOR ... а при помощи функции DBSEEK().
|
|
|
|