Почему так долго работают TIBEvents в Delphi?

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Barvetal
Сообщения: 7
Зарегистрирован: 02 дек 2004, 13:36

Почему так долго работают TIBEvents в Delphi?

Сообщение Barvetal » 26 дек 2007, 20:08

Всем здравствуйте!

Использую Firebird 1.5.

У меня есть приложение, которое должно оперативно реагировать на Firebird-события, возникающие в базе данных.

Приложение написано с использованием IBX. В частности, используется компонент TIBEvents.

Так вот, Дельфийский обработчик события, повешенный на этот компонент, периодически запускается намного позже, чем событие произошло (примерно до 10 сек задержки).

Как можно ускорить запуск обработчика событий? Потому что такая задержка для нашего приложения недопустима.

Заранее спасибо!

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Почему так долго работают TIBEvents в Delphi?

Сообщение WildSery » 26 дек 2007, 21:25

Barvetal писал(а):обработчик события, повешенный на этот компонент, периодически запускается намного позже, чем событие произошло (примерно до 10 сек задержки).
Как определил?

Barvetal
Сообщения: 7
Зарегистрирован: 02 дек 2004, 13:36

Re: Почему так долго работают TIBEvents в Delphi?

Сообщение Barvetal » 26 дек 2007, 21:37

WildSery писал(а):
Barvetal писал(а):обработчик события, повешенный на этот компонент, периодически запускается намного позже, чем событие произошло (примерно до 10 сек задержки).
Как определил?
Потому что обработчик события отрисовывает изображения на экране и запускает принтер на печать. Все это происходит не сразу, а с различной задержкой...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 26 дек 2007, 23:51

с различной задержкой...
тормоза в сети? момед?

события вообще-то срабатывают по commit.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 27 дек 2007, 10:21

Я автора тоже к этой мысли подводить пытаюсь.
Только ведь так и не ответил, "не сразу" и "задержка" между чем и чем?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 27 дек 2007, 12:45

Начало отсчёта - аллах его ведает, а вот конец - верняк когда бумажка из принтера вылезать начинает.

Barvetal
Сообщения: 7
Зарегистрирован: 02 дек 2004, 13:36

Сообщение Barvetal » 27 дек 2007, 14:09

WildSery писал(а):Я автора тоже к этой мысли подводить пытаюсь.
Только ведь так и не ответил, "не сразу" и "задержка" между чем и чем?
Ага. Сорри...
Система такая. Есть кафетерий. В кафетерии стоит система контроля доступа (СКД). Эта система обрабатывает события, когда карточки были приложены к кардхолдеру (не знаю, как правильно назвать эту хрень - пластмасовая коробочка с лампочкой, к которой нужно приложить карточку).

Так вот, на событие ("приложил карточку к кардхолдеру"), можно повесить на сервере выполнение любой программы c командной строкой. Я написал программу, которая на это событие скидывает в базу данных Firebird информацию о пользователе, и запускает event, что добавилась новая регистрация пользователя.

Дальше - на клиентской машине в кафетерии необходимо отобразить в другой моей программе информацию о человеке, приложившим пропуску, и распечатать чек. Больше программа ничего не делает!

Так вот - иногда программа сразу показывает информацию о человеке и запускает чек на печать, иногда с задержкой (до 10 секунд где-то).

Вот я и спрашиваю - что это может быть такое? Почему так долго?

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 27 дек 2007, 14:33

Barvetal писал(а):
WildSery писал(а):Я автора тоже к этой мысли подводить пытаюсь.
Только ведь так и не ответил, "не сразу" и "задержка" между чем и чем?
Ага. Сорри...
Система такая. Есть кафетерий. В кафетерии стоит система контроля доступа (СКД). Эта система обрабатывает события, когда карточки были приложены к кардхолдеру (не знаю, как правильно назвать эту хрень - пластмасовая коробочка с лампочкой, к которой нужно приложить карточку).

Так вот, на событие ("приложил карточку к кардхолдеру"), можно повесить на сервере выполнение любой программы c командной строкой. Я написал программу, которая на это событие скидывает в базу данных Firebird информацию о пользователе, и запускает event, что добавилась новая регистрация пользователя.

Дальше - на клиентской машине в кафетерии необходимо отобразить в другой моей программе информацию о человеке, приложившим пропуску, и распечатать чек. Больше программа ничего не делает!

Так вот - иногда программа сразу показывает информацию о человеке и запускает чек на печать, иногда с задержкой (до 10 секунд где-то).

Вот я и спрашиваю - что это может быть такое? Почему так долго?
так у тебя программа каждый раз заново запускается при получении события от карточной системы?

Barvetal
Сообщения: 7
Зарегистрирован: 02 дек 2004, 13:36

Сообщение Barvetal » 27 дек 2007, 14:43

stix-s писал(а):так у тебя программа каждый раз заново запускается при получении события от карточной системы?
Да. Но она очень маленькая. Все, что она делает - это коннектится к базе, записывает туда запись, и завершается. Это консольное приложение, которое не содержит никаких окон...

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 27 дек 2007, 14:52

Barvetal писал(а):
stix-s писал(а):так у тебя программа каждый раз заново запускается при получении события от карточной системы?
Да. Но она очень маленькая. Все, что она делает - это коннектится к базе, записывает туда запись, и завершается. Это консольное приложение, которое не содержит никаких окон...
хм, а ты полагаешь, что цомпутер только и ждет как твою программу запустить? у него других дел нет?
что-нить в виртуальную память сбросить или вытащить оттуда, в режим эноргосбережения уйти или или еще чего
каждый раз заново коннект приходится заново делать, может еще и метаданные закэшировать
зачем?
FB тут ни при чем

Barvetal
Сообщения: 7
Зарегистрирован: 02 дек 2004, 13:36

Сообщение Barvetal » 27 дек 2007, 15:22

stix-s писал(а):хм, а ты полагаешь, что цомпутер только и ждет как твою программу запустить? у него других дел нет?
что-нить в виртуальную память сбросить или вытащить оттуда, в режим эноргосбережения уйти или или еще чего
каждый раз заново коннект приходится заново делать, может еще и метаданные закэшировать
зачем?
FB тут ни при чем
Хм... Звучит очень даже рационально... Так, как бы проверить...
Я, наверное, настрою часы посекундно с сервером, и посмотрю по таймстемпу, когда данные ложатся в базу - сразу после прикладывания карточки, или позже..

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 27 дек 2007, 16:09

Напиши так:
echo %date% %time% "Пришёл кто-то" >> enter.log

Ответить