powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DOA Много потоков External exception EBF00BAA
11 сообщений из 36, страница 2 из 2
DOA Много потоков External exception EBF00BAA
    #39614630
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, FireDAC тоже использует oci.dll и проблем с 32/64 не наблюдалось. Но DOA немного быстрее, а мне это критично.
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39615461
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удалось побороть, вроде бы. Вдруг кому-то понадобиться.
В Oracle.pas в процедуре TOracleSession.GetEnv
условие
Код: pascal
1.
if ThreadSafe then EnvMode:= EnvMode or OCI_Threaded


заменяем на
Код: pascal
1.
EnvMode:= EnvMode or OCI_Threaded;
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39615547
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbУдалось побороть, вроде бы. Вдруг кому-то понадобиться.
В Oracle.pas в процедуре TOracleSession.GetEnv
условие
Код: pascal
1.
if ThreadSafe then EnvMode:= EnvMode or OCI_Threaded



заменяем на
Код: pascal
1.
EnvMode:= EnvMode or OCI_Threaded;


Да, хороший баг. oci.dll думала, что она не используется из разных потоков, если не поставить ThreadSafe := True, получается.
Понятное дело, что в таком случае крэшилось, даже если 1 коннект = 1 поток, но таких потоков несколько.
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39615571
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbУдалось побороть, вроде бы. Вдруг кому-то понадобиться.
В Oracle.pas в процедуре TOracleSession.GetEnv
условие
Код: pascal
1.
if ThreadSafe then EnvMode:= EnvMode or OCI_Threaded


заменяем на
Код: pascal
1.
EnvMode:= EnvMode or OCI_Threaded;



А не проще Threadsafe в True установить ?
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39615739
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще, но ThreadSafe влияет не только на работу oci.dll, но и на "обертку" DOA, заставляя многие операции выполнять в крит. секции, а это дополнительные накладные расходы, а мне важно (конкретно в этом случае) выигрыш нескольких сотен мс на каждой операции.
Если быстродействие не так сильно важно, то лучше ставить ThreadSafe = True и не париться
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39615806
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbПроще, но ThreadSafe влияет не только на работу oci.dll, но и на "обертку" DOA, заставляя многие операции выполнять в крит. секции, а это дополнительные накладные расходы, а мне важно (конкретно в этом случае) выигрыш нескольких сотен мс на каждой операции.
Если быстродействие не так сильно важно, то лучше ставить ThreadSafe = True и не париться

Когда в следующий раз вылезут глюки, вспомни 21259629
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39615825
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbКстати, FireDAC тоже использует oci.dll и проблем с 32/64 не наблюдалось. Но DOA немного быстрее, а мне это критично.у тебя что, там 1000 запросов в секунду что ли делается? может стоит поменять архитектуру приложения вместо того, чтобы явно включать режим возможных багов?
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39616032
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2, не 1000, а 50 потоков пишут по 6 массивов размером 500000 элементов, и когда SetVariable массивов 20 секунд, то это очень долго. И выигрыш в 5-7 секунд это много для меня
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39616033
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
20 секунд это когда все нормально, а бывает и 2 минуты, и 4 минуты. И вот это уже неприемлемо
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39616048
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

Возможно, стоит подумать над тем, чтобы потоки заменить на процессы, которые не добавляют OCI_Threaded в EnvMode (и, конечно, не ставят ThreadSafe в True).

Это даст профит для менеджера памяти oci.dll - не будет блокировок. А в твоем нынешнем варианте - они будут при любом дерганье памяти внутри неё.

Я, конечно, не знаю, какой там менеджер памяти, может - и "самый быстрый в мире и без блокировок" (с), может, и системный, но оба варианта маловероятны.
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39616054
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock, в данном случае я пока не вижу как это сделать, хотя направление интересное
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DOA Много потоков External exception EBF00BAA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]