![]() |
Модераторы: MetalFan |
![]() ![]() ![]() |
|
gregson |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 28.6.2009 Репутация: нет Всего: нет |
Доброго дня всем!
В Дельфи я далеко не мастер, ничего профессионального не писал, однако для себя лет 5 пишу некоторые вещи. Столкнулся с проблемой при написании простенького на мой взгляд сервера. Писалось все на Delphi 7 с использованием встроенного Indy. Простая форма, на ней Indy TCP Server и Memo для вывода логов. Вся основная обработка идет в процедуре OnExecute. Через некоторое время после запуска сервера я обнаружил что процессор загружен на 50 процентов, еще через час на 97%. Понаблюдав логи стало понятно, что проц начинает грузиться когда подключаются несколько клиентов. Пока думаю на CoInitializeEx но что с этим делать не представляю. По каждому подключению создается свой поток, каждый пользователь системы выполняет подключение к 1С через свой поток, я вижу в логе когда приходит команда от пользователя, в диспетчере задач открывается 1С, отрабатывает свои действия, закрывается 1С, все отлично, я бы даже понял где копать если бы речь шла о чрезмерном потреблении памяти! Но чтобы процессор так убивался на пустом месте. Еще раз хочу отметить что в какой то момент процессор переходит в режим загнанной лошади, при этом все пользователи давно отключились от сервера, а приложение продолжает нагружать проц по полной.
Это сообщение отредактировал(а) Rrader - 4.7.2009, 17:45 |
|||
|
||||
V0LT |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 16.6.2009 Репутация: нет Всего: 2 |
Да у вас небольшая ошибка ... возможно причина в этом
Добавте:
![]() Можете попробовать внешнюю компоненту написать ... если конечно влазить в код возможно ... обязательно загрузив её в конфигурации в глобальном модуле - и уже по ней определять что и как это сэкономит память и проц ... а OLE это очень громоздко Ах да ... ещё забыл добавить ... если вам приспичит сделать в компоненте (в DLL) поток ... могу скинуть в личку проект Турникет (самодельная СКУД для управлением турникета + внешняя компонента для 1C) Это сообщение отредактировал(а) V0LT - 3.7.2009, 22:57 |
||||
|
|||||
gregson |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 28.6.2009 Репутация: нет Всего: нет |
Спасибо за указание на ошибку. К сожалению на данный момент сроки настолько поджимают, что мне просто некогда будет посмотреть вашу софтину. Освобождение переменной v77 не решило проблему, однако натолкнуло меня на правильную мысль и я четко отловил момент когда начинается перегрузка процессора. При некорректном завершении работы со стороны клиента, например если у него внезапно пропал доступ в интернет, по идее мое приложение в этот момент обрабытывает либо:
Либо:
Но что то не так, thread не убивается полностью.
Это сообщение отредактировал(а) Rrader - 4.7.2009, 17:45 |
||||||
|
|||||||
V0LT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 16.6.2009 Репутация: нет Всего: 2 |
Посмотрите соседнюю тему http://forum.vingrad.ru/forum/topic-161329...y1181102/0.html
Это сообщение отредактировал(а) V0LT - 4.7.2009, 09:02 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: ActiveX/СОМ/CORBA" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |