Одно соединение с БД для разных окон.

ramko

Коллеги добрый день.Проектирую приложение из нескольких окон, на каждом из них планируется работа с БД (чтение, запись).Как оптимальнее построить работу с БД? Мне не хочется создавать в каждом окне свое соеднинение, хочу одно соединение открыть при запуске приложения и закрыть при закрытии.С ув.Виктор
24 ответа

ramko

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


ramko

Не знаю как это сделать.Один из варианто класс dbcontext, но является ли такой способ оптимальным не могу понять.


ramko

Как оптимальнее построить работу с БД?
если оптимальнее для программиста, то в при открытии каждого окна - получить соединение и работай.Задержки не будет, т.к. драйвер умный и не закрывает соединение некоторое время. Вдруг ты передумаешь))).


ramko

хочу одно соединение открыть при запуске приложения и закрыть при закрытии.
Микрософт не рекомендует так делать. У него оптимизировано как раз повторное открытие соединений.Рекомендую прочитать про пулл соединений


ramko

Микрософт не рекомендует так делать. У него оптимизировано как раз повторное открытие соединений.Рекомендую прочитать про пулл соединений
Где это он не рекомендует? Только не говорите, что тогда ещё интернета не было


ramko

Где это он не рекомендует?
А где рекомендует по другому?И где ваша рекомендация))?


ramko

А где рекомендует по другому?И где ваша рекомендация))?
По другому рекомендуется, чуть-ли не в любой книжке, или мануале по ASP.NET.А моя "рекомендация" выше: делайте "одно соединение открыть при запуске приложения и закрыть при закрытии", в чём проблема?P.S.: и эта тема не раз уже в данном разделе обсуждалась.


ramko

По другому рекомендуется, чуть-ли не в любой книжке, или мануале по ASP.NET.
мы вроде в топике про десктоп и винФормс
По другому рекомендуется, чуть-ли не в любой книжке, или мануале по ASP.NET.
отвечу в вашем стиле:Где эти рекомендации?
А моя "рекомендация" выше
замечательно. И не возбуждайтесь когда советуют другие.
P.S.: и эта тема не раз уже в данном разделе обсуждалась.
аж интересно, что плохого в совете Cat2 или моём.У меня проект именно так и работает.


ramko

А моя "рекомендация" выше: делайте "одно соединение открыть при запуске приложения и закрыть при закрытии", в чём проблема?
и садомазо при обрыве соединения


ramko

Где это он не рекомендует? Только не говорите, что тогда ещё интернета не было
Организация пулов соединений может существенно улучшить производительность и масштабируемость приложения. По умолчанию пул соединений в ADO.NET включен. ...Внимание!Настоятельно рекомендуется всегда закрывать соединение после его использования, чтобы оно вернулось в пул. Это можно сделать с помощью методов Close или Dispose объекта Connection либо открыв все соединения внутри инструкции using в C# или инструкции Using в Visual Basic. Соединения, которые явно не закрыты, нельзя добавить или вернуть в пул. Дополнительные сведения см. в разделе Оператор using (Справочник по C#) или Практическое руководство. Удаление системного ресурса (Visual Basic) для Visual Basic.


ramko

мы вроде в топике про десктоп и винФормс
Ты спросил: "А где рекомендует по другому?". Вот при разработке веб-приложений рекомендуют по другому.
отвечу в вашем стиле:Где эти рекомендации?
Чукча не читатель? "в любой книжке, или мануале по ASP.NET".
замечательно. И не возбуждайтесь когда советуют другие.
А я и не возбуждаюсь.
аж интересно, что плохого в совете Cat2 или моём.У меня проект именно так и работает.
В совете Cat2 ничего плохого и полезная ссылка.А в твоём не понятно что ты имеешь в виду под "получить соединение". Получить можно и уже открытое соединение


ramko

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


ramko

Вы серъёзно уверены, что это имеет какой-то смысл для того, что разрабатывает ТС?За счёт какой такой магии вдруг улучшится производительность и масштабируемость его приложения?С чего вдруг соединение уже будет использоваться и чем, или контекст транзакции будет не тот?У него программулинка из нескольких окон и вангую, что оно будет прекрасно работать, если "одно соединение открыть при запуске ... и закрыть при закрытии".


ramko

Да бросьте. Ну случится такое раз в год, ну закроет пользователь программулину, откроет заного.
это вместо того чтоб просто взять из пула соединение?


ramko

это вместо того чтоб просто взять из пула соединение?
Так, давайте разберёмся. Соединения с сервером нет к примеру в течение 5 минут.И что даст пользователю то, что оно берётся из пула? Он что так, что сяк видит ошибку.ТС спрашивает: "Как оптимальнее построить работу с БД?".И пишет: "Мне не хочется создавать в каждом окне свое соеднинение, хочу одно соединение открыть при запуске приложения и закрыть при закрытии.".И вот моё мнение, что для его небольшого приложения, которым не думаю, что будут часто пользоваться, данное решение вполне себе оптимально.


ramko

Вот при разработке веб-приложений рекомендуют по другому.
LOLВодку с вином не мешают. Десктоп и веб - разная архитектура.А мы в топике десктоп.Ты совсем мальчик что ле?Сказал бы просто что описался.


ramko

и вангую
"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.


ramko

LOLВодку с вином не мешают. Десктоп и веб - разная архитектура.А мы в топике десктоп.Ты совсем мальчик что ле?Сказал бы просто что описался.
Не красиво на личности переходить, когда сказать нечего.В веб множеству запросов в короткий промежуток времени нужно одно и тоже соединение.Поэтому там и рекомендуют закрывать его как можно быстрее, чтобы оно попало в пул и могло быть использовано.В десктопе же этого нет, а значит в большинстве случаев и нет проблем.А если нет проблем, то не имеет особого смысла следовать рекомендациям по их избеганию


ramko

Не красиво на личности переходить, когда сказать нечего.
я среагировал только на твой переходу тут:
Где это он не рекомендует? Только не говорите, что тогда ещё интернета не было
т.к. сам видел эти рекомендации. Но для тебя это ОБС.Я не против.


ramko

я среагировал только на твой переходу тут:т.к. сам видел эти рекомендации. Но для тебя это ОБС.Я не против.
1. Надо понимать почему даются те, или иные рекомендации, а не тупо им следовать.2. Рекомендации не обязательны к исполнению, на то они и рекомендации.3. Я так и не увидел ссылку на то, где написано "Мы НЕ рекомендуем так делать".


ramko

Petro123,согласись, что из рекомендации делать вот так, совершенно не следует, что другое решение не имеет право на жизнь, или будет хуже.Для задачи ТС оно вполне себе оптимально.


ramko

skyANA,соединение денег стоит


ramko

может у автора выполняются запросы 1000 раз в секунду, тогда не имеет смысла каждый раз открывать\закрывать подключения, если программа делает 1 запрос в час, то смысл держать его открытым не имеет, всё остальное находится посередине :)в чем проблема автора, я не понял. Создайте до того, как создаете окна и передавайте класс для работы с БД в окно :)


ramko

И вот моё мнение, что для его небольшого приложения, которым не думаю, что будут часто пользоваться, данное решение вполне себе оптимально.
у меня - противоположное.