Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ADO, SQL SERVER и многопоточность
|
|||
|---|---|---|---|
|
#18+
Читал, что некоторые из Вас разрабатывали dll (на С++, Delphi) из которых делается запросы к базам SQL через ADO. У меня вопрос такой. Известно, что dll кешируется в памяти IIS (Internet Information Server). Не получится ли так, что одновременно два пользователя делают запрос (запросы одинаковые, но по разным параметрам) и сервер перепутает юзеров и выдаст ответ не тому. Хотелось бы мнение, кто с этим работал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 12:12 |
|
||
|
ADO, SQL SERVER и многопоточность
|
|||
|---|---|---|---|
|
#18+
А что он может перепутать? Ну вот есть у тебя DLL, в ней одна или несколько экпортируемых функций. Если функции самодостаточные - есть некий набор входных параметров и выходных - то ничего страшного из-за многопоточности произойти не может в принципе. Проблемы могут быть только в одном случае - когда в твоей DLL'ке есть shared данные и функции их используют. В этом случае сам программист должен заботиться о синхронизации и реализовывать ее соответствующими методами. Кстати, при обращении к extended stored proc даже без IIS сервер не выгружает DLL сразу после выполнения процедуры - ее надо отцеплять через DBCC dllname (FREE). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 13:35 |
|
||
|
ADO, SQL SERVER и многопоточность
|
|||
|---|---|---|---|
|
#18+
>GreenSunrise shared данные, если я правильно понял , - это общедоступные данные, которые инициализируются один раз при загрузге DLL. По поводу выгрузке dll из памяти IIS. Я пишу dll на Delphi 6. Никогда не слышал, что dll нужно отцеплять от сервера. А что за команда "DBCC dllname (FREE)" и где(когда) ее надо давать? Очень интересно. Спасибо за ответ, Sergy. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2001, 06:04 |
|
||
|
ADO, SQL SERVER и многопоточность
|
|||
|---|---|---|---|
|
#18+
По поводу shared data. Не знаю, как это выглядит в Delphi, а на си - в коде пишешь, например, #pragma data_seg(".shared"), а в DEF-файле надо пометить эту секцию как shared. При загрузке этой DLL в разные адресные пространства данные, содержащиеся в shared секции, будут совместно использоваться разными приложениями. Более подробно можно почитать в MSDN, статья называется "HOWTO: Share Data Between Different Mappings of a DLL". Когда SQL server выполняет extended stored proc, то он загружает соответствующую DLL. После выполнения процедуры он НЕ выгружает ее СРАЗУ ЖЕ. И если тебе необходимо ее выгрузить принудительно, то это выполняется командой DBCC dllname (FREE). Про саму команду см. BOL. Зачем ее бывает надо выгружать ручками? Ну, например, ты отлаживаешься, понимаешь, что надо исправить ошибку, исправляешь ее, компилишься - а файл запрещен для перезаписи, потому что сиквел его еще не отпустил. Вот и приходится выгружать принудительно. В рабочем режиме наверное такая надобность почти не будет возникать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2001, 08:59 |
|
||
|
ADO, SQL SERVER и многопоточность
|
|||
|---|---|---|---|
|
#18+
> GreenSunrise По поводу "DBCC dllname (FREE)" , если использовать IIS, то я поступаю так: снимаю флажок "Кешировать ISAPI" (если разрабатыватся ISAPI) в свойствах "Application Configuration" при отладке и ставлю его наместо при запуске. Таким образом, этот способ то же годится. Спасибо за ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2001, 09:43 |
|
||
|
ADO, SQL SERVER и многопоточность
|
|||
|---|---|---|---|
|
#18+
Еще одно добавление насчет shared данных. Допустим, вы написали код, в котором есть примерно следующее: int iTest; RETCODE __declspec(dllexport) xp_func1(SRV_PROC *srvproc) { iTest++; return 0; } Если DLL не выгружается каждый раз после выполнения хранимой процедуры, то переменная iTest будет увеличиваться при КАЖДОМ обращении к процедуре, поскольку в пределах DLL она глобальна. В этом случае надо синхронизовывать данные вручную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2001, 13:35 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3550&tid=1825727]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 351ms |

| 0 / 0 |
