Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Совет новичку. На каждый чих открывать конекшн заново? / 25 сообщений из 28, страница 1 из 2
22.03.2017, 14:52
    #39424910
Совет новичку. На каждый чих открывать конекшн заново?
Всем привет!
Нужен совет новичку в ООП.
Я все время кодил на Дельфи (модульно-процедурным методом), вот теперь переехал на C# WinForms, и как-то он у меня легко пошёл, никаких книг по нему не читал, только гугл и VS2015 на виртуалке и вперёд.
Интересует техника работы с БД. В Дельфях как просто было - открыл Connection, поработал длительное время (хоть сутки), закрыл Connection.
Примеры же по C# пестрят конструкциями, где на каждый чих открывается Connection, производится действие с данными, и тут же закрывается Connection. Вот эта фича мне непонятна, а что разве нельзя Connection всё время держать открытым, и закрывать только при выходе из программы?
Если сами не сможете объяснить, то хотя бы киньте ссыль на книгу-статью, где обосновывается такая методика.
...
Рейтинг: 0 / 0
22.03.2017, 14:57
    #39424921
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Новичок ООП..а что разве нельзя Connection всё время держать открытым, и закрывать только при выходе из программы?
Можно, если клиентов 5-10, то без разницы

https://msdn.microsoft.com/ru-ru/library/8xx3tyca(v=vs.110).aspx
...
Рейтинг: 0 / 0
22.03.2017, 15:12
    #39424943
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Cat2, ну и работа в один поток...
...
Рейтинг: 0 / 0
22.03.2017, 15:18
    #39424957
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Новичок ООП..Вот эта фича мне непонятна, а что разве нельзя Connection всё время держать открытым, и закрывать только при выходе из программы?

Не нужно этого делать. А в чем проблема? Накладных расходов нет.
...
Рейтинг: 0 / 0
22.03.2017, 15:20
    #39424962
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
hVosttНакладных расходов нет.
Ну это не совсем так, но к остальному присоединяюсь...
...
Рейтинг: 0 / 0
22.03.2017, 15:22
    #39424967
Fantomny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Накладных расходов нет. ,
в свое время обжегся на этом...
...
Рейтинг: 0 / 0
22.03.2017, 16:10
    #39425029
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Новичок ООП..Если сами не сможете объяснить, то хотя бы киньте ссыль на книгу-статью, где обосновывается такая методика.
смотри Connection Pooling

https://msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.110).aspx
...
Рейтинг: 0 / 0
22.03.2017, 16:36
    #39425051
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Вообще-то иногда полезно не сразу закрывать соединение.
Например.
1. Когда какой-нибудь датчик шлет 100 инсертов в секунду, то лучше вообще не закрывать
2. Когда в начале работы программы закачивается много таблиц, то лучше открыть, закачать все и закрыть.
...
Рейтинг: 0 / 0
22.03.2017, 16:42
    #39425058
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
buserhVosttНакладных расходов нет.
Ну это не совсем так, но к остальному присоединяюсь...

Тут дело такое. Если это становится проблемой, значит что-то делается не так. Т.е. многократной открытие/закрытие соединение за короткий промежуток времени выявляет проблему не в работе с соединением, а в логике работы с данными. Слишком мелкие и частые запросы в БД это косяк. Поэтому в целом можно считать, что накладных расходов нет, там есть пул. Зато профит от кратковременной жизни соединения очевиден с точки зрения надёжности.
...
Рейтинг: 0 / 0
22.03.2017, 16:43
    #39425062
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Cat2Вообще-то иногда полезно не сразу закрывать соединение.
Например.
1. Когда какой-нибудь датчик шлет 100 инсертов в секунду, то лучше вообще не закрывать
2. Когда в начале работы программы закачивается много таблиц, то лучше открыть, закачать все и закрыть.

Не надо делать 100 инсертов в секунду, надо организовать буффер и инсертить пачками. Не в открытом/закрытом соединении проблема.
...
Рейтинг: 0 / 0
22.03.2017, 22:29
    #39425280
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
hVosttCat2Вообще-то иногда полезно не сразу закрывать соединение.
Например.
1. Когда какой-нибудь датчик шлет 100 инсертов в секунду, то лучше вообще не закрывать
2. Когда в начале работы программы закачивается много таблиц, то лучше открыть, закачать все и закрыть.

Не надо делать 100 инсертов в секунду, надо организовать буффер и инсертить пачками. Не в открытом/закрытом соединении проблема.
Вот еще. Буду я фигней заниматься и оптимизировать наноскунды . Сервер справляется и ладно
...
Рейтинг: 0 / 0
23.03.2017, 05:38
    #39425339
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Cat2Вот еще. Буду я фигней заниматься и оптимизировать наноскунды . Сервер справляется и ладно

Смотря какие требования по нагрузке, надёжности, доступности и отказоустойчивости. Если там конь не валялся, никаких требований, лишь бы хоть как-то шевелилось, то ок.
...
Рейтинг: 0 / 0
23.03.2017, 12:20
    #39425653
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Cat2Вообще-то иногда полезно не сразу закрывать соединение.
Например.
1. Когда какой-нибудь датчик шлет 100 инсертов в секунду, то лучше вообще не закрывать
Ниже ответили. Да для множественных инсертов есть свои средства.
Cat22. Когда в начале работы программы закачивается много таблиц, то лучше открыть, закачать все и закрыть.
А вот за "закачивание много таблиц в начале работы" - молотком по пальцам!
...
Рейтинг: 0 / 0
23.03.2017, 14:36
    #39425816
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
ЕвгенийВА вот за "закачивание много таблиц в начале работы" - молотком по пальцам!
вне контекста конкретной задачи - эмоциональная оценка неуместна
...
Рейтинг: 0 / 0
23.03.2017, 16:04
    #39425921
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
самое главное, не объяснили автору, почему нужно закрывать.
для закрывания подключений есть несколько причин:
а) Пул соединений не бесконечный, если их не закрывать, а количество подключений к базе большое, то желательно высвобождать место в пуле, чтоб другие могли подключиться.
б) Если забывать закрывать соединение и потом каждый раз будет отрываться новое, пул соединений на сервере переполнится и 'nj приведет к блокинку (скорее всего) и все подключенные к базе клиенты тоже будут иметь проблемы. По этому лучше, когда подключение закрывается примерно там же, где и открывалось. В пределах 1 экрана хотя бы (в коде).
Обычно соединение помещают в блок using {}. Когда объект Connection будет Disposed, соединение само закроется
в) обычно 1 соединения должны быть открыто в рамках 1 транзакции, так будет проще и удобнее понять, что происходит в рамках этого подключения в будущем.
г) если забыть закрыть соединение, то оно может быть закрыто уборщиком, но тут может крыться опасная проблема, закрытие подключения может быть достаточно длительной операцией и если она превысит таймаут сборщика, сборка мусора "упадет", + будут фризы.
...
Рейтинг: 0 / 0
24.03.2017, 04:43
    #39426198
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
ИзопропилЕвгенийВА вот за "закачивание много таблиц в начале работы" - молотком по пальцам!
вне контекста конкретной задачи - эмоциональная оценка неуместнаНе только не неуместна, но и необходима!
...
Рейтинг: 0 / 0
24.03.2017, 07:22
    #39426222
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
ЕвгенийВА вот за "закачивание много таблиц в начале работы" - молотком по пальцам!
Вы вероятно путаете "много таблиц" с "много длинных таблиц".
...
Рейтинг: 0 / 0
24.03.2017, 08:59
    #39426257
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Roman Mejtesсамое главное, не объяснили автору, почему нужно закрывать.
для закрывания подключений есть несколько причин:
а) Пул соединений не бесконечный, если их не закрывать, а количество подключений к базе большое, то желательно высвобождать место в пуле, чтоб другие могли подключиться.
Кто это другие?

ИМХО великое множество WinForms приложений запускается в одном экземпляре в единицу времени на машине пользователя.
...
Рейтинг: 0 / 0
24.03.2017, 09:01
    #39426259
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Roman Mejtesб) Если забывать закрывать соединение и потом каждый раз будет отрываться новое, пул соединений на сервере переполнится и 'nj приведет к блокинку (скорее всего) и все подключенные к базе клиенты тоже будут иметь проблемы. По этому лучше, когда подключение закрывается примерно там же, где и открывалось. В пределах 1 экрана хотя бы (в коде).
Уточните пожалуйста что Вы имели в виду, когда написали "пул соединений на сервере".
...
Рейтинг: 0 / 0
24.03.2017, 09:02
    #39426260
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Roman Mejtesв) обычно 1 соединения должны быть открыто в рамках 1 транзакции, так будет проще и удобнее понять, что происходит в рамках этого подключения в будущем.
Кому и где будет проще и удобнее?
...
Рейтинг: 0 / 0
24.03.2017, 09:03
    #39426262
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Roman Mejtesг) если забыть закрыть соединение, то оно может быть закрыто уборщиком, но тут может крыться опасная проблема, закрытие подключения может быть достаточно длительной операцией и если она превысит таймаут сборщика, сборка мусора "упадет", + будут фризы.
Ни разу такого не встречал.
...
Рейтинг: 0 / 0
24.03.2017, 11:59
    #39426430
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Cat2ЕвгенийВА вот за "закачивание много таблиц в начале работы" - молотком по пальцам!
Вы вероятно путаете "много таблиц" с "много длинных таблиц".
какая нафик разница?
Сейчас ковыряюсь с говнопроектом, когда то там "для улучшения производительности кешировли" метаданные. При их небольшом количестве и когда БД в локальной сети - занимало несколько сек.
Сейчас стало много и БД в тырнете, пинг до сервера >=20 мс и вся гребаная инициализация полчаса занимает.
...
Рейтинг: 0 / 0
24.03.2017, 12:43
    #39426474
Арктур Менгск
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
ЕвгенийВCat2пропущено...

Вы вероятно путаете "много таблиц" с "много длинных таблиц".
какая нафик разница?
Сейчас ковыряюсь с говнопроектом, когда то там "для улучшения производительности кешировли" метаданные. При их небольшом количестве и когда БД в локальной сети - занимало несколько сек.
Сейчас стало много и БД в тырнете, пинг до сервера >=20 мс и вся гребаная инициализация полчаса занимает.Вы - о чём вообще? Что это за поток сознания?
...
Рейтинг: 0 / 0
24.03.2017, 15:09
    #39426583
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
Арктур МенгскВы - о чём вообще? Что это за поток сознания?
Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий.(с)
...
Рейтинг: 0 / 0
24.03.2017, 16:24
    #39426649
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совет новичку. На каждый чих открывать конекшн заново?
ЕвгенийВАрктур МенгскВы - о чём вообще? Что это за поток сознания?
Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий.(с)До ленивой загрузки писатели не догадались?
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Совет новичку. На каждый чих открывать конекшн заново? / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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