On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 11.12.05 22:24. Заголовок: Проблема с COPY TO в Clipper 5.2


Обнаружил, что COPY TO работает в 87(!) раз медленнее, чем в Clipper 5.01! Специально проверял по SECONDS()...
Заменил на цикл DO с копированием каждой записи отдельно с использованием FIELDGET() и FIELDPUT() - процесс пошёл быстрее в 3 раза!
И всё равно по сравнению с 5.01 получается в 30 раз дольше... Закрыть DBF, скопировать как файл и открыть снова не потянет - работа идёт в сети.
Думал, дело в CDX. Отключил перед копированием (close indexes) - ничего не изменилось...

Кто-нибудь ещё с такой проблемой сталкивался?

Спасибо: 0 
Ответов - 14 [только новые]


администратор




Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 11.12.05 22:38. Заголовок: Re:


Лукашевский
Оба EXE собирал в PM моде или REAL ?
Примерчик покажи. Проверю у себя ;)
Что за размер базы ?



Спасибо: 0 
Профиль



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 12.12.05 13:24. Заголовок: Dima


Ну 5.01 понятно что REAL, а 5.2 действительно PROTECTED.
Но фишка оказалась не в этом, а в DOSIDLE() от GLASSMANа. Как только её заремил, процесс возвратился к своей обычной скорости.

Мой пример:
COPY TO ("ARCHIVE\" + Bases) for !DELETED() .AND.NEXTKEY()#K_ESC

Можно с тем же успехом убирать NEXTKEY(), но хочется иметь возможность прерывания процесса по инициативе пользователя... да и NEXTKEY() в такой вариации не один раз встречается.
А DOSIDLE() убрать, так в XP-NT проблемы начинаются...
Для Clipper 5.01 я пользовался PATCHA.EXE CLIP2F, а с 5.2 что-то не срослось, и я вынужден был поставить DOSIDLE(). Может, кто-нибудь знает вариант получше?

Спасибо: 0 
постоянный участник


Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 12.12.05 14:29. Заголовок: Re:


У меня кстати в Клиппер 5.3 при использовании DOSIDLE в ХР эффекта нет.
Процессор грузит на все 100, другим программам работать не дает при этом Excel страничку несколько минут грузит и выводит на печать

Спасибо: 0 
Профиль
постоянный участник




Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 12.12.05 16:52. Заголовок: Re:


Лукашевский пишет:
цитата
Но фишка оказалась не в этом, а в DOSIDLE() от GLASSMANа. Как только её заремил, процесс возвратился к своей обычной скорости.

Мой пример:
COPY TO ("ARCHIVE\" + Bases) for !DELETED() .AND.NEXTKEY()#K_ESC


Говорилось много раз. Если комп быстрый, то функции обработки клавиатуры сначала происходят очень часто. Винда думает - комп ничего не делает, дай-ка я в 10 раз понижу приоритет задачи. И задача начинает работать ооооооооооооооооочень медленно. До тех пор, пока ты не прекратишь давать ей сигналы "я ничего не делаю" или до тех пор, пока ты не нажмешь что-нибудь на клавиатуре. Можешь проверить - при нажатом Alt-е копирование будет идти быстро.

Проблема решается или временным запрещением (на время работы copy) вызовов разгрузки системы или считыванием клавиатуры не чаще, чем два раза в секунду. В последнем случае иногда возможно отставание часов на XP/NT в дос-сессии

Спасибо: 0 
Профиль



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 12.12.05 22:07. Заголовок: suv2:


Замечательно! Я с удовольствием последую совету, если подскажешь, какой функцией можно временно запретить вызовы разгрузки системы!
А то DOSIDLE() как один раз вызван, так и всё - возможности его выгрузки или запрета я, например, не знаю...

Спасибо: 0 



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 12.12.05 22:39. Заголовок: Re:


Vlad04 пишет:
цитата
У меня кстати в Клиппер 5.3 при использовании DOSIDLE в ХР эффекта нет.
Процессор грузит на все 100, другим программам работать не дает при этом Excel страничку несколько минут грузит и выводит на печать


Вполне может быть несколько DOSIDLE-модулей, написанных в разное время разными людьми...
Этот модуль я выбрал, отбраковав FT_IAMIDLE() и вроде ещё один DOSIDLE(), которые действительно почену-то не работали (по крайней мере в PROTECTED MODE).
Тот, что я сейчас использую, снижает загрузку проца на XP до 4 процентов. Могу прислать.

Спасибо: 0 



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 13.12.05 11:46. Заголовок: Re:


Это так , для информации..

Лукашевский пишет:
цитата
Обнаружил, что COPY TO работает в 87(!) раз медленнее, чем в Clipper 5.01!


Кстати подобная ситуация была и с хХарбором под ХР. Сейчас реализация команды COPY TO изменена и
если ставишь команду SET HARDCOMMIT OFF то работает быстро.


Спасибо: 0 



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 14.12.05 05:52. Заголовок: Re:


MMK:

С причиной в 5.2 уже разобрались: DOSIDLE() вместе с NEXTKEY(),
а если отключить DOSIDLE(), то в Xрюше проблем, но работает почти так же быстро, как в 5.01 (ну, может процентов на 10-15 медленнее - это уже ерунда)

А вот как КОНКРЕТНО это дело обойти, SUV2 нас ещё не просветил, хотя теорию изложил популярно...

Спасибо: 0 
постоянный участник




Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 14.12.05 15:20. Заголовок: Re:


Лукашевский пишет:
цитата
Замечательно! Я с удовольствием последую совету, если подскажешь, какой функцией можно временно запретить вызовы разгрузки системы!
А то DOSIDLE() как один раз вызван, так и всё - возможности его выгрузки или запрета я, например, не знаю...


Я не использую твою библиотеку разгрузки, у меня своя, самописная. И в отдельном виде она не существует, т.к. она встроена в моё личное переделанное клипперное ядро. Там я могу отключать-включать разгрузку на лету. Тебе в таком случае надо воспользоваться вторым вариантом - считывать кнопки не чаще 2 раз в секунду. Но чтобы это сделать, тебе придется использовать seconds(), который СИЛЬНО (очень!!!! очень сильно) тормозит систему :-))) И выигрыш по скорости ты вряд ли получишь, если будешь использовать стандартный seconds(). А как считывать в WinXP время, чтобы система не тормозила - это отдельная сложная тема, она на форуме обсуждалась.

Можно еще попробовать ковырнуть твою библиотеку, чтобы добавить возможность запрещения-разрешения. Или попытаться изготовить отдельную библу.

Быть может, в твоей библе есть спец-функция, которая один раз делает разгрузку. Т.е. не в автомате типа installIdle() (и разгрузочные вызовы происходят автоматом при inkey()), а вручную типа IAmIdleNow(). Тогда надо использовать второй вариант и вызывать разгрузку только тогда, когда надо.

Спасибо: 0 
Профиль



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 17.12.05 03:25. Заголовок: Re:


suv2 пишет:
цитата
Быть может, в твоей библе есть спец-функция, которая один раз делает разгрузку. Т.е. не в автомате типа installIdle() (и разгрузочные вызовы происходят автоматом при inkey()), а вручную типа IAmIdleNow(). Тогда надо использовать второй вариант и вызывать разгрузку только тогда, когда надо.


Когда-то что-то такое я сделать пытался, но выяснилось, что "типа IAmIdleNow()" нужно задействовать не только для INKEY(), но и для MENU TO, и не факт, что сей список не продолжится...

Спасибо: 0 
постоянный участник




Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 19.12.05 12:53. Заголовок: Re:


Menu to, read, achoice... - первые две - на клиппер и декомпилируются, можешь внести исправления сам. Achoice на ассемблере, потому перепиши её на tbrowse и вставляй туда IAmIdleNow(). Или шли библу

Спасибо: 0 
Профиль



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 25.12.05 03:31. Заголовок: SUV2:


Я сделал проще - связался с Дмитрием Стекленевым, он сделал возможность выгрузки DOSIDLE(.F.) Сейчас пробую. Вроде работает. Наверное, обновление скоро появится на его сайте.

Спасибо: 0 
постоянный участник




Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 26.12.05 10:40. Заголовок: Re:


Что за сайт?

Спасибо: 0 
Профиль
модератор




Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 26.12.05 12:48. Заголовок: Re:


suv2 пишет:
цитата
Что за сайт?


http://glass.ptv.ru/software/dosidle.html

Спасибо: 0 
Профиль
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 63
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет