Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос про мидас [Win2k]


Страницы:   1 2 3 4 5 6 7 8

Alexander_K ©   (2004-03-10 15:11:00) 

Приветствую всех!

Написал программу, с тонким клиентом, которая работает с БД Оракл.
Instancing - Multiple use
Threading model - Apartment
Возникла следующая проблема:
При запуске в нескольких клиентах одновременно довольно длительный запросов эти запросы не выполняются параллельно! Выяснил это запуском одновременно длинного запроса и короткого. По идее если они выполняются параллельно - короткий закончиться быстрее... На самом же деле заканчиваются они в таком же порядке как и запускались...
Получается что каждое подключение не обрабатывается в отдельном витке на сервере приложений. Об этом свидетельствует то, что форма сервера приложений при выполнении запроса повисает и ее нельзя перетащить и т.д.

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


Reindeer Moss Eater   (2004-03-17 14:02:00) [41]

А что этому может помешать?

Поток №1 вызвал конструктор
Поток №2 присвоил значения свойствам
Поток №3 присвоил значения параметрам
Поток №4 вызвал метод Open
Поток №5 проскроллил датасет с первой записи до десятой
Поток №6 проскроллил датасет с десятой записи до последней
Поток №7 закрыл датасет
Поток №8 вызвал деструктор.

Что невозможного или незаконного в этом?


Michail Dalakov   (2004-03-17 13:51:00) [42]

Хорошо уберем слэнг и скажем так,

как могут экземпляры объектов созданные в разных потоках окрываться в одном потоке?


Reindeer Moss Eater   (2004-03-17 13:36:00) [43]

Начнем с того, что Query ни в каких потоках не лежат.
В потоках выполняется код.


Michail Dalakov   (2004-03-17 13:31:00) [44]

Так не бывает,

как могут Query лежащие в разных потоках открываться в одном потоке.


Reindeer Moss Eater   (2004-03-17 13:12:00) [45]

Michail Dalakov ©  

Уже сто лет назад было выяснено, что у автора N датамодулей и N ниток.


Michail Dalakov   (2004-03-17 13:10:00) [46]

Michail Dalakov ©   (11.03.04 23:00) [85]
1.Ctrl+Shift+Esc
Выбираем счетчик потоков и смотрим создается ли новый поток


Reindeer Moss Eater   (2004-03-17 13:00:00) [47]

А я против разве?


Alexander_K   (2004-03-17 12:58:00) [48]

Reindeer Moss Eater ©   (17.03.04 12:55) [101]

Дык это все понятно! Да почему это так????? Должно же быть в разных потоках!


Reindeer Moss Eater   (2004-03-17 12:55:00) [49]

Значит методы Open вызываются из одной нити.
Значит пока не выполнится первый Open у первого клиента, не начнется выполняться второй Open у второго клиента.

Вот и все.


Alexander_K   (2004-03-17 12:51:00) [50]

Пробовал и непосредственно перед Open() Ставить, то же самое, ID один и тот же!!


Reindeer Moss Eater   (2004-03-17 12:27:00) [51]

а на создание RDM

Так ЭрДэЭмы - то наверняка создаются главной ниткой. И на выполнение запросов это не влияет.

Влияет то, из какой нити открываются датасеты.


Alexander_K   (2004-03-17 12:14:00) [52]

Только что я сделал такую фигню, но не в момент открытия датасета, а на создание RDM, вставляя данные в листбокс, и получилось что треад один и тот же!
Хотя Instancing - Multiple use
Threading model - Apartment
Почему так?


Reindeer Moss Eater   (2004-03-17 11:56:00) [53]

Берем событие датасета. Например BeforeOpen.
Внутри него пишем в лог значение GetCurrentThreadID и узнаем всю правду про то, из каких нитей вызван метод Open у этих самых датасетов


Alexander_K   (2004-03-17 11:39:00) [54]

serge35   (17.03.04 11:10) [94]
Это надумано

Reindeer Moss Eater ©   (17.03.04 11:14) [95]
Я делал метод у сервера, в который передавался запрос через параметр, а я присваивал его Query и поле этого делал Open.
А в какой ветке оно вызывается - в этом и вопрос!
В делфи похоже вызывается в разных нитках, а как это делается в C++ Builder??


Reindeer Moss Eater   (2004-03-17 11:14:00) [55]

Alexander_K ©   (16.03.04 17:54) [93]
Да я и сам пробовал вызывать, и просто ClientDataSet открывать, чтобы он сам открыл запрос - без разници, все так же.


Так в какой нитке ты это делал сам?
Всегда в одной и той же?


serge35   (2004-03-17 11:10:00) [56]

Спроси об этом у Си - шников, а то они все считают, что Дельфи - это полное фуфло, а Си - рулеззззззззззззз!!!


Alexander_K   (2004-03-16 17:54:00) [57]

Да я и сам пробовал вызывать, и просто ClientDataSet открывать, чтобы он сам открыл запрос - без разници, все так же.


Reindeer Moss Eater   (2004-03-16 10:24:00) [58]

Ты выяснил, кто вызывает методы Open у твоих датасетов ?


Alexander_K   (2004-03-16 10:20:00) [59]

Поставил 4 патч на Borland C++ Builder 6 не помогло...


Alexander_K   (2004-03-16 10:20:00) [60]

Поставил 4 патч на Borland C++ Builder 6 не помогло...


Страницы:   1 2 3 4 5 6 7 8

Наверх

Титульная страница Поиск, карта сайта Написать письмо