Форум » Clipper » Непонятное резкое замедление работы программы » Ответить

Непонятное резкое замедление работы программы

lehavika: WinXP Clipper 5.1+Blinker 6. В цикле читаю текстовые файлы и ищу соответствие данных с данными в dbf. По ходу работы вывожу на экран счетчик и проверяю inkey() нажатие любой клавиши. Через некоторое время работа программы резко, в разы замедляется, причем при каждом запуске при обработке разных файлов, иногда может очень быстро обработать 5 файлов, иногда 10 и т.д. Подскажите, пожалуйста, в чем может быть причина и как с ней бороться.

Ответов - 5

Григорьев Владимир: Лишь могу предположить, что одна из возможных причин, что в программе идет работа со строками данных, которые выделяются в виртуальной памяти, а работа системы виртуальной памяти в Clipper замедляет работу программы. То есть вопрос связан с тем, сколько одновременно в блоке кода используется строк

petr: Нет сведений: 1) сетевая среда или локальный диск компа 2) замедление + ускорение равно(?) в среднем - времени чтения,копирования файлов вне программы (файловым менеджером) 1) Если есть ннтивирус - он может "долго" проверять часть "текстовых файлов", что читает программа. Можно отключить антивирусу - проверку на определенные файлы 2) Возможно, кешируется чтение диска или запись (добавить памяти). 3) Можно посмотреть что делает программа/система в моменты замедления - утилитами SYSINTERNALS Diskmon PROCMON

suv2: Во время работы программы нажми ALT и убедись, что она начинает работать быстро Замедление происходит потому, что ты используешь функцию разгрузки процессора в режиме ожидания типа NTIdle() или нечто аналогичное, которая во время считывания кнопки клавиатуры передает управления операционной системе, чтобы она могла делать свои дела ПОсколько в цикле ты постоянно вызываешь inkey(), это интерпретируется как простой решение 1. - отключать на время работы функцию разгрузки систему, если библиотечный модуль для разгрузки системы имеет соответствующие функции (мне такие модули неизвестны, кроме моего собственного) решение 2. проверять нажатие кнопки не чаще 1 раза в секунду (2 раза/сек уже может снизить производительность). для этого необходимо будет использовать постоянный вызов seconds(), что в XP вызывает торможение всех остальных программ. Т.е. функцию seconds() надо менять на нечто своё


subbota: Посмотри на http://nova-mir.narod.ru В Clipper есть много тонкостей Cкачай там демо, а в них прочитай все Read.me и в демо-примере раздел "Комментарии" Там написано, что можно ускорить работу Clipper-программ, особенно в XP Но лучше почитай сам, потому что когда другие показывают как поет Карузо у них все-равно так не получается

sergey5703: Можно посоветовать заменить 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().



полная версия страницы