![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про мидас [Win2k]
Alexander_K © (2004-03-10 15:11:00)Приветствую всех!
Написал программу, с тонким клиентом, которая работает с БД Оракл.
Instancing - Multiple use
Threading model - Apartment
Возникла следующая проблема:
При запуске в нескольких клиентах одновременно довольно длительный запросов эти запросы не выполняются параллельно! Выяснил это запуском одновременно длинного запроса и короткого. По идее если они выполняются параллельно - короткий закончиться быстрее... На самом же деле заканчиваются они в таком же порядке как и запускались...
Получается что каждое подключение не обрабатывается в отдельном витке на сервере приложений. Об этом свидетельствует то, что форма сервера приложений при выполнении запроса повисает и ее нельзя перетащить и т.д.
Народ подскажите как решить данную проблему, хотелось бы чтобы запросы выполнялись параллельно..
Reindeer Moss Eater (2004-03-17 16:54:00) [21]А с чем ты был несогласен в 85 посте, в котором ты возражал против поста №84 (против подчеркнутого диагноза в посте №84)
?
Michail Dalakov (2004-03-17 16:46:00) [22]To Reindeer Moss Eater © (17.03.04 16:08) [125]
Да, не бывает такое, чтобы для двух RDM созданных в разных потокахметод Open вызывался в одном потоке. (остальное по контексту выше, дабы не повторяться)
C чем ты не согласен?
Что невозможного или незаконного в этом?[109]
Все возможно
Asdor (2004-03-17 16:24:00) [23]2 Alexander_K © (17.03.04 16:12) [126]
Код в студию (либо мне на почту)...
Либо смотри секцию инициализации модуля (если таковые есть в билдере). Там должно быть что-то в духе TComponentFactory(или какая-то другая Factory)->Create(ComServer, Класс_Твоего_RDM, Class_ID_ТвоегоRDM, ciMultiInstance, tmApartment) ...
Alexander_K (2004-03-17 16:12:00) [24]Asdor © (17.03.04 15:46) [123]
В C++ Builder похоже немного по другому как-то, потому что я так пока и не нашел где RDM создается и про TComponentFactory в проекте моем я ничего не нашел...
Reindeer Moss Eater (2004-03-17 16:08:00) [25]Это и следовало ожидать, чудес не бывает
пост № 84: Выдан диагноз.
посто № 85: реплика "Так не бывает".
И все по-новой ...
Michail Dalakov (2004-03-17 15:47:00) [26]To Nikolay M. © (17.03.04 15:33) [121]
Причем здесь счетчик RDM-ов, что в одном потоке нельзя создать два RDM-а?
Asdor (2004-03-17 15:46:00) [27]Какая фабрика классов используется при создании RDM?
Должна использоваться TComponentFactory (в Дельфи так называется, в билдере может CComponentFactory).
Если нет - то грабли возможно здесь...
Michail Dalakov (2004-03-17 15:44:00) [28]To Alexander_K © (17.03.04 15:19) [120]
Это и следовало ожидать, чудес не бывает
Как создаются RemoteComObject-ы?
Nikolay M. (2004-03-17 15:33:00) [29]
> Alexander_K © (17.03.04 15:19) [120]
А счетчик RDM-ов, как где-то в начале советовали, выводишь?
Alexander_K (2004-03-17 15:19:00) [30]Сейчас решил посмотреть из диспетчера задач сколько потоков у меня в сервере
При запуске 1 клиента запустился сервер с 4 потоками
При логине к базе в клиенте на сервере стало 5 потоков
При запуске последующих клиентов (6 штук) потоков на сервере не увеличилось!
Выходит как будь-то single...
Но в проекте у меня стоит
Instancing - Multiple use
Threading model - Apartment
В чем грабли?
Michail Dalakov (2004-03-17 15:18:00) [31]To Nikolay M. © (17.03.04 14:39) [115]
Оставтье oracle в покое он работает как положенно,
?? А может транзакции есть блокирующие?
это на обычный select * from table? не бывает так.
Reindeer Moss Eater (2004-03-17 15:17:00) [32]To Alexander_K © (17.03.04 14:03) [110]
To Reindeer Moss Eater © (17.03.04 13:12) [105]
Господа вы как нибудь определитесь в самом деле?
Господин Alexander_K в посте 110 говорил о создании датамодулей одним потоком
А господин Reindeer Moss Eater в посте 105 говорил о том, что они создаются и их все же несколько, а не один.
Michail Dalakov (2004-03-17 15:06:00) [33]To Alexander_K © (17.03.04 14:03) [110]
To Reindeer Moss Eater © (17.03.04 13:12) [105]
Господа вы как нибудь определитесь в самом деле?
Michail Dalakov © (17.03.04 13:10) [104]
Nikolay M. (2004-03-17 14:41:00) [34]А может транзакции есть блокирующие? Не заметил такой мысли в обсуждении выше.
Nikolay M. (2004-03-17 14:39:00) [35]А может транзакции есть блокирующие? Не заметил такой мысли в обсуждении выше.
Michail Dalakov (2004-03-17 14:36:00) [36]To Reindeer Moss Eater c (17.03.04 14:02) [109]
Вопрос не в том возможно это или нет в принципе, вопрос в том, что это абсурд для данного конкретного случая
На каждое клиентское приложение в отдельных потоках на сервере создаются COM-объекты, каждое из клиентских приложений вызывает метод COM-объекта, который в конечном счете приводит к открытию набора данных,
где в данном случае по твоему должен открываться набор данных?
Michail Dalakov (2004-03-17 14:36:00) [37]To Reindeer Moss Eater c (17.03.04 14:02) [109]
Вопрос не в том возможно это или нет в принципе, вопрос в том, что это абсурд для данного конкретного случая
На каждое клиентское приложение в отдельных потоках на сервере создаются COM-объекты, каждое из клиентских приложений вызывает метод COM-объекта, который в конечном счете приводит к открытию набора данных,
где в данном случае по твоему должен открываться набор данных?
Reindeer Moss Eater (2004-03-17 14:21:00) [38]В скольких потоках созданы датамодули и датасеты - рояли не играет.
Важно в каких потоках вызываются методы Open.
Возможно там просто synchronize для этого используется, я не знаю, - тогда все Open идут из одного потока. Главного.
Reindeer Moss Eater (2004-03-17 14:14:00) [39]В скольких потоках созданы датамодули и датасеты - рояли не играет.
Важно в каких потоках вызываются методы Open.
Возможно там просто synchronize для этого используется, я не знаю, - тогда все Open идут из одного потока. Главного.
Alexander_K (2004-03-17 14:03:00) [40]Michail Dalakov © (17.03.04 13:51) [108]
Так вот в этом-то и вопрос, почему Borland C++ Builder 6 создает все в одном потоке?