Приложение C # Windows - Многие потоки используют одно и то же соединение? - PullRequest
5 голосов
/ 23 декабря 2008

У меня есть многопоточное приложение c WINDOWS. Насколько я понимаю, в веб-среде соединения объединяются автоматически. Я также понимаю, что в приложении для Windows это не так. Поэтому для приложения Windows одно и то же соединение должно использоваться и не закрываться после каждого вызова, а вместо этого закрываться при закрытии приложения.

Мне любопытно - правда ли, что я прав? Если да, могут ли два потока использовать одно и то же соединение для одновременного получения набора данных из БД или эта функциональность поставлена ​​в очередь?

Спасибо

Ответы [ 3 ]

5 голосов
/ 23 декабря 2008

Пул соединений является одной из функций ADO.NET. Поэтому соединения уже объединены. Не только в веб-среде.

http://www.ondotnet.com/pub/a/dotnet/2004/02/09/connpool.html

2 голосов
/ 23 декабря 2008

Я так понимаю, что в сети окружение, соединения объединяются автоматически. Это тоже мой понимая, что в приложении Windows, это не тот случай.

Нет, это неправильно, как указал m3rLinEz. Соединения всегда объединяются.

Следовательно, для приложения Windows то же самое соединение должно быть использовано, а не закрыто после каждого звонка, но вместо закрывается, когда приложение закрывается.

Вы могли бы сохранять соединение открытым на время работы приложения в монолитном приложении WinForms. Но лучше использовать стандартный шаблон открытия / закрытия соединений, когда они вам нужны. Пул соединений означает, что вы не заметите разницу в производительности. И ваш код доступа к данным будет совместим с серверными приложениями, такими как ASP.NET.

Если это так, могут ли два потока использовать один и тот же соединение, чтобы получить набор данных из БД одновременно или это что функциональность поставлена ​​в очередь?

Нет. Классы ADO.NET (соединение, команда и т. Д.) Не являются поточно-ориентированными и не должны совместно использоваться потоками без синхронизации. Но, как отмечалось выше, вы должны предпочесть стандартный шаблон для доступа к данным.

0 голосов
/ 23 декабря 2008

хорошо, так что мое предположение было основано на наблюдении: когда я пытался настроить win-приложение в обычном режиме пула, я всегда испытываю 3-5-секундную задержку, когда устанавливается реальное соединение с удаленным сервером. Даже когда я делал открытие, затем закрытие, следующий запрос всегда будет иметь такую ​​задержку.

Когда сервер подключается, он, очевидно, не устанавливает соединение для каждого подключения в пуле. Кроме того, достаточно ли уместен механизм объединения для захвата соединения, которое, как он знает, уже открыто, или возможно ли просто захватить любое случайное соединение?

Что такое максимальное количество подключений по умолчанию в пуле?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...