Страница 1 из 1
Почему так долго работают TIBEvents в Delphi?
Добавлено: 26 дек 2007, 20:08
Barvetal
Всем здравствуйте!
Использую Firebird 1.5.
У меня есть приложение, которое должно оперативно реагировать на Firebird-события, возникающие в базе данных.
Приложение написано с использованием IBX. В частности, используется компонент TIBEvents.
Так вот, Дельфийский обработчик события, повешенный на этот компонент, периодически запускается намного позже, чем событие произошло (примерно до 10 сек задержки).
Как можно ускорить запуск обработчика событий? Потому что такая задержка для нашего приложения недопустима.
Заранее спасибо!
Re: Почему так долго работают TIBEvents в Delphi?
Добавлено: 26 дек 2007, 21:25
WildSery
Barvetal писал(а):обработчик события, повешенный на этот компонент, периодически запускается намного позже, чем событие произошло (примерно до 10 сек задержки).
Как определил?
Re: Почему так долго работают TIBEvents в Delphi?
Добавлено: 26 дек 2007, 21:37
Barvetal
WildSery писал(а):Barvetal писал(а):обработчик события, повешенный на этот компонент, периодически запускается намного позже, чем событие произошло (примерно до 10 сек задержки).
Как определил?
Потому что обработчик события отрисовывает изображения на экране и запускает принтер на печать. Все это происходит не сразу, а с различной задержкой...
Добавлено: 26 дек 2007, 23:51
kdv
с различной задержкой...
тормоза в сети? момед?
события вообще-то срабатывают по commit.
Добавлено: 27 дек 2007, 10:21
WildSery
Я автора тоже к этой мысли подводить пытаюсь.
Только ведь так и не ответил, "не сразу" и "задержка" между чем и чем?
Добавлено: 27 дек 2007, 12:45
Merlin
Начало отсчёта - аллах его ведает, а вот конец - верняк когда бумажка из принтера вылезать начинает.
Добавлено: 27 дек 2007, 14:09
Barvetal
WildSery писал(а):Я автора тоже к этой мысли подводить пытаюсь.
Только ведь так и не ответил, "не сразу" и "задержка" между чем и чем?
Ага. Сорри...
Система такая. Есть кафетерий. В кафетерии стоит система контроля доступа (СКД). Эта система обрабатывает события, когда карточки были приложены к кардхолдеру (не знаю, как правильно назвать эту хрень - пластмасовая коробочка с лампочкой, к которой нужно приложить карточку).
Так вот, на событие ("приложил карточку к кардхолдеру"), можно повесить на сервере выполнение любой программы c командной строкой. Я написал программу, которая на это событие скидывает в базу данных Firebird информацию о пользователе, и запускает event, что добавилась новая регистрация пользователя.
Дальше - на клиентской машине в кафетерии необходимо отобразить в другой моей программе информацию о человеке, приложившим пропуску, и распечатать чек. Больше программа ничего не делает!
Так вот - иногда программа сразу показывает информацию о человеке и запускает чек на печать, иногда с задержкой (до 10 секунд где-то).
Вот я и спрашиваю - что это может быть такое? Почему так долго?
Добавлено: 27 дек 2007, 14:33
stix-s
Barvetal писал(а):WildSery писал(а):Я автора тоже к этой мысли подводить пытаюсь.
Только ведь так и не ответил, "не сразу" и "задержка" между чем и чем?
Ага. Сорри...
Система такая. Есть кафетерий. В кафетерии стоит система контроля доступа (СКД). Эта система обрабатывает события, когда карточки были приложены к кардхолдеру (не знаю, как правильно назвать эту хрень - пластмасовая коробочка с лампочкой, к которой нужно приложить карточку).
Так вот, на событие ("приложил карточку к кардхолдеру"), можно повесить на сервере выполнение любой программы c командной строкой. Я написал программу, которая на это событие скидывает в базу данных Firebird информацию о пользователе, и запускает event, что добавилась новая регистрация пользователя.
Дальше - на клиентской машине в кафетерии необходимо отобразить в другой моей программе информацию о человеке, приложившим пропуску, и распечатать чек. Больше программа ничего не делает!
Так вот - иногда программа сразу показывает информацию о человеке и запускает чек на печать, иногда с задержкой (до 10 секунд где-то).
Вот я и спрашиваю - что это может быть такое? Почему так долго?
так у тебя программа каждый раз заново запускается при получении события от карточной системы?
Добавлено: 27 дек 2007, 14:43
Barvetal
stix-s писал(а):так у тебя программа каждый раз заново запускается при получении события от карточной системы?
Да. Но она очень маленькая. Все, что она делает - это коннектится к базе, записывает туда запись, и завершается. Это консольное приложение, которое не содержит никаких окон...
Добавлено: 27 дек 2007, 14:52
stix-s
Barvetal писал(а):stix-s писал(а):так у тебя программа каждый раз заново запускается при получении события от карточной системы?
Да. Но она очень маленькая. Все, что она делает - это коннектится к базе, записывает туда запись, и завершается. Это консольное приложение, которое не содержит никаких окон...
хм, а ты полагаешь, что цомпутер только и ждет как твою программу запустить? у него других дел нет?
что-нить в виртуальную память сбросить или вытащить оттуда, в режим эноргосбережения уйти или или еще чего
каждый раз заново коннект приходится заново делать, может еще и метаданные закэшировать
зачем?
FB тут ни при чем
Добавлено: 27 дек 2007, 15:22
Barvetal
stix-s писал(а):хм, а ты полагаешь, что цомпутер только и ждет как твою программу запустить? у него других дел нет?
что-нить в виртуальную память сбросить или вытащить оттуда, в режим эноргосбережения уйти или или еще чего
каждый раз заново коннект приходится заново делать, может еще и метаданные закэшировать
зачем?
FB тут ни при чем
Хм... Звучит очень даже рационально... Так, как бы проверить...
Я, наверное, настрою часы посекундно с сервером, и посмотрю по таймстемпу, когда данные ложатся в базу - сразу после прикладывания карточки, или позже..
Добавлено: 27 дек 2007, 16:09
WildSery
Напиши так:
echo %date% %time% "Пришёл кто-то" >> enter.log