Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.06;
Скачать: CL | DM;

Вниз

ADOConnection=3 потока?   Найти похожие ветки 

 
Bless ©   (2005-09-23 09:27) [0]

В новом приложении на пустую форму кидаю ADOCOnnection и соединяюсь с базой MSSQL. (connected=true). Запускаюсь и вижу что в приложении project1 живут 4 потока.
Кто-то может сказать, почему их так много? Что они делают?


 
Курдль ©   (2005-09-23 09:31) [1]

Думаю, что поддерживают сетевые протоколы, а что? Мешают?


 
Bless ©   (2005-09-23 10:08) [2]

Курдль ©   (23.09.05 09:31) [1]
Думаю, что поддерживают сетевые протоколы, а что? Мешают?


Смущают. А что значит "поддерживают сетевые протоколы"?


 
Курдль ©   (2005-09-23 10:11) [3]


> Смущают. А что значит "поддерживают сетевые протоколы"?
>


Если программа должна поддерживать взаимосвязь с другой программой, и при этом действия юзера не должны приостанавливаться до завершения какой-либо операции, то логично предположить, что эта взаимосвязь будет организована с помощью отдельных потоков (асинхронная связь).


 
Nikolay M. ©   (2005-09-23 10:38) [4]


> Курдль ©   (23.09.05 09:31) [1]
> Думаю, что поддерживают сетевые протоколы

Опять фигню какую-то болтаешь. Лишь бы ляпнуть, а что - неважно?


> Кто-то может сказать, почему их так много? Что они делают?

Создаются при создании АДО-объектов для выполнения асинхронных запросов (для ADOConnection - асинхронного соединения при ConnectOptions = coAsyncConnect). Можешь в этом убедиться, не бросая на форму ни один компонент из закладки АДО и написав в OnButtonClick что-то вроде

var
 c : TADOConnection;
begin
 c := TADOConnection.Create (self);
 c.Free;
end;


оттрейсить эти 2 строчки и параллельно посмотреть на кол-во потоков в Task manager.


 
Bless ©   (2005-09-23 11:24) [5]


> Курдль ©   (23.09.05 10:11) [3]
>
>
> > Смущают. А что значит "поддерживают сетевые протоколы"?
>
> >
>
>
> Если программа должна поддерживать взаимосвязь с другой
> программой, и при этом действия юзера не должны приостанавливаться
> до завершения какой-либо операции, то логично предположить,
>  что эта взаимосвязь будет организована с помощью отдельных
> потоков (асинхронная связь).


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

>Nikolay M. [4]

> Создаются при создании АДО-объектов для выполнения асинхронных
> запросов (для ADOConnection - асинхронного соединения при
> ConnectOptions = coAsyncConnect).


ConnectOptions стоит по-умолчанию coConnectUnspecified. Проверил : во время выполнения он таким и остается. И тем не менее  - 4 потока.
Кроме того, почему именно 3 дополнительных? Почему не 10, не 1? Это где-то выставляется?


>  Можешь в этом убедиться, не бросая на форму ни один компонент
> из закладки АДО и написав в OnButtonClick что-то вроде
>
> var
>  c : TADOConnection;
> begin
>  c := TADOConnection.Create (self);
>  c.Free;
> end;


Это немножко не так.
Будет только один поток (проверил).
Их будет 4, если между Create и Free вставить

c.connectionString :=...
c.connected := true;


То есть, дополнительные потоки появляются не после создания, а после соединения с базой. А именно после вызова метода ConnectionObject.Open
Наверное количество потоков или определяется где-то в недрах ADO либо сервером.
Только непонятно нафига 3?. Что нельзя создавать их по мере необходимости?
Или они все 3 нужны с самого начала? Тогда что они делают?


 
Nikolay M. ©   (2005-09-23 11:36) [6]


> ConnectOptions стоит по-умолчанию coConnectUnspecified.
> Проверил : во время выполнения он таким и остается. И тем
> не менее  - 4 потока.

Неважно, какие установлены опции, потоки создаются при создании АДО-объекта.


> Это немножко не так.
> Будет только один поток (проверил).

Не устанавливая соединения, непосредственно до момента выполнения Free у программы будет 3 потока.


 
Bless ©   (2005-09-23 12:07) [7]

Nikolay M. ©   (23.09.05 11:36) [6]
Не устанавливая соединения, непосредственно до момента выполнения Free у программы будет 3 потока.


Гм... Проверял?
У меня 1 поток, если не устанавливать соединение.
Делал даже так (в OnClick кнопки)
var
c : TADOConnection;
begin
c := TADOConnection.Create (self);
end;


Все-равно один поток.


 
Nikolay M. ©   (2005-09-23 13:27) [8]

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


 
Bless ©   (2005-09-23 15:20) [9]

Nikolay M.[8]>

Да писал я Free. И ставил точку останова. Один поток.
И так делал:

c := TADOConnection.Create (self);
showmessage(c.connectionString);
с.free;

и смотрел количество потоков, пока висело окошко - один поток!


В твоем случае с высвободится сразу, как неиспользуемая далее в коде переменная.


Вот уж сильно сомневаюсь. Чтоб позволить себе такие вольности, у Делфи недостаточно информации. c вполне могло бы быть не ADOConnection-ом,
а, к примеру, TForm и тогда с этим объектом вполне можно было бы дальше работать, хотя сама переменная потерялась при выходе из обработчика. В этом случае подобная самодеятельность Делфи (освобождение памяти) могла бы закончиться крахом приложения.
Кроме того где-то внутри ADOConnection в конструкторе могли теоретически создаваться какие-то списки в куче (о который Делфи не в курсе дела), которые освобождаются в деструкторе и простое освобождение памяти, выделенной под объект, привело бы к утечке памяти.
Короче говоря, я почти уверен, что в таких случаях делфи память не освобождает. Разве только память под саму переменную (4 байта), не не память, выделенную под экземпляр класса.


 
Nikolay M. ©   (2005-09-23 15:48) [10]


> Да писал я Free. И ставил точку останова. Один поток.

У меня 3.


> c вполне могло бы быть не ADOConnection-ом,
> а, к примеру, TForm и тогда с этим объектом вполне можно
> было бы дальше работать, хотя сама переменная потерялась
> при выходе из обработчика.

Имхо, ты путаешь локальные и глобальные переменные.


 
Bless ©   (2005-09-23 16:57) [11]

Nikolay M. ©   (23.09.05 15:48) [10]
У меня 3.


Гм... Странно. А какая версия ADO?
У меня 2.7

Имхо, ты путаешь локальные и глобальные переменные.

Что именно я путаю?
По отношению к объектам нет никакой разницы, имхо, созданы они внутри процедуры или вне любых процедур (в отличие от с++).

Проверь сам.

procedure TForm1.Button1Click(Sender: TObject);
var
 f: TForm1;
begin
 f := TForm1.create(nil);
 f.show;
end;


В результате на экране будет несколько одинаковых форм.
Или, может, я неправильно истолковал твое замечание?


 
Nikolay M. ©   (2005-09-23 18:39) [12]


> Гм... Странно. А какая версия ADO?
> У меня 2.7

Смотря как ты ее получаешь. У меня
ADOConnection.Version = 2.7.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DataAccess\Version = 2.71.9040.2
Component checker-а майкрософтовского под рукой нет, качать лень :(
Дельфи 6.


> может, я неправильно истолковал твое замечание?

Нет, это я не дочитал до

> Короче говоря, я почти уверен, что в таких случаях делфи
> память не освобождает. Разве только память под саму переменную
> (4 байта), не не память, выделенную под экземпляр класса.


 
Nikolay M. ©   (2005-09-24 13:45) [13]

Попробовал сейчас дома. ADOConnection.Version = 2.7.
Создание-уничтожение TADOTable не меняет кол-во потоков. TADOConnection - создается 1 дополнительный поток (пул коннектов?).


 
DiamondShark ©   (2005-09-24 13:58) [14]


> А какая версия ADO?

А дело не в версии, а в провайдере.
Один провайдер может вообще никаких потоков не создавать, а другой -- много чего ещё создавать.
Вы при сравнении ещё указывайте, какими провайдерами пользуетесь, и с какими параметрами.


 
Nikolay M. ©   (2005-09-24 21:20) [15]


> Вы при сравнении ещё указывайте, какими провайдерами пользуетесь,
>  и с какими параметрами.

А мы тут совсем идиоты... Какой в [4] может быть провайдер?



Страницы: 1 вся ветка

Текущий архив: 2005.11.06;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.054 c
6-1122019736
Senti
2005-07-22 12:08
2005.11.06
Помогите разобраться с вот этим кодом...


2-1129059115
Кабан
2005-10-11 23:31
2005.11.06
Промогите разобраться ServerSocket1 и ClientSocket1


6-1121720841
LexaDup
2005-07-19 01:07
2005.11.06
Нахождение клиентом сервера


1-1129182020
pmi1
2005-10-13 09:40
2005.11.06
Изменям Edit, при этом картинка не портится


8-1119343306
Josefina
2005-06-21 12:41
2005.11.06
Проблемы со свуком