powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ADO, SQL SERVER и многопоточность
6 сообщений из 6, страница 1 из 1
ADO, SQL SERVER и многопоточность
    #32012919
Sergy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Читал, что некоторые из Вас разрабатывали dll (на С++, Delphi) из которых делается запросы к базам SQL через ADO.
У меня вопрос такой. Известно, что dll кешируется в памяти IIS (Internet Information Server). Не получится ли так, что одновременно два пользователя делают запрос (запросы одинаковые, но по разным параметрам) и сервер перепутает юзеров и выдаст ответ не тому. Хотелось бы мнение, кто с этим работал.
...
Рейтинг: 0 / 0
ADO, SQL SERVER и многопоточность
    #32012929
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что он может перепутать? Ну вот есть у тебя DLL, в ней одна или несколько экпортируемых функций. Если функции самодостаточные - есть некий набор входных параметров и выходных - то ничего страшного из-за многопоточности произойти не может в принципе. Проблемы могут быть только в одном случае - когда в твоей DLL'ке есть shared данные и функции их используют. В этом случае сам программист должен заботиться о синхронизации и реализовывать ее соответствующими методами.
Кстати, при обращении к extended stored proc даже без IIS сервер не выгружает DLL сразу после выполнения процедуры - ее надо отцеплять через DBCC dllname (FREE).
...
Рейтинг: 0 / 0
ADO, SQL SERVER и многопоточность
    #32012964
Sergy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>GreenSunrise
shared данные, если я правильно понял , - это общедоступные данные, которые инициализируются один раз при загрузге DLL.
По поводу выгрузке dll из памяти IIS. Я пишу dll на Delphi 6. Никогда не слышал, что dll нужно отцеплять от сервера.
А что за команда "DBCC dllname (FREE)" и где(когда) ее надо давать? Очень интересно.

Спасибо за ответ, Sergy.
...
Рейтинг: 0 / 0
ADO, SQL SERVER и многопоточность
    #32012978
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу 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. Зачем ее бывает надо выгружать ручками? Ну, например, ты отлаживаешься, понимаешь, что надо исправить ошибку, исправляешь ее, компилишься - а файл запрещен для перезаписи, потому что сиквел его еще не отпустил. Вот и приходится выгружать принудительно. В рабочем режиме наверное такая надобность почти не будет возникать.
...
Рейтинг: 0 / 0
ADO, SQL SERVER и многопоточность
    #32012988
Sergy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> GreenSunrise
По поводу "DBCC dllname (FREE)" , если использовать IIS, то я поступаю так: снимаю флажок "Кешировать ISAPI" (если разрабатыватся ISAPI) в свойствах "Application Configuration" при отладке и ставлю его наместо при запуске.
Таким образом, этот способ то же годится.

Спасибо за ответ.
...
Рейтинг: 0 / 0
ADO, SQL SERVER и многопоточность
    #32013023
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одно добавление насчет shared данных.
Допустим, вы написали код, в котором есть примерно следующее:

int iTest;

RETCODE __declspec(dllexport) xp_func1(SRV_PROC *srvproc)
{
iTest++;
return 0;
}

Если DLL не выгружается каждый раз после выполнения хранимой процедуры, то переменная iTest будет увеличиваться при КАЖДОМ обращении к процедуре, поскольку в пределах DLL она глобальна. В этом случае надо синхронизовывать данные вручную.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ADO, SQL SERVER и многопоточность
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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