|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Всем привет! Нужен совет новичку в ООП. Я все время кодил на Дельфи (модульно-процедурным методом), вот теперь переехал на C# WinForms, и как-то он у меня легко пошёл, никаких книг по нему не читал, только гугл и VS2015 на виртуалке и вперёд. Интересует техника работы с БД. В Дельфях как просто было - открыл Connection, поработал длительное время (хоть сутки), закрыл Connection. Примеры же по C# пестрят конструкциями, где на каждый чих открывается Connection, производится действие с данными, и тут же закрывается Connection. Вот эта фича мне непонятна, а что разве нельзя Connection всё время держать открытым, и закрывать только при выходе из программы? Если сами не сможете объяснить, то хотя бы киньте ссыль на книгу-статью, где обосновывается такая методика. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 14:52 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Новичок ООП..а что разве нельзя Connection всё время держать открытым, и закрывать только при выходе из программы? Можно, если клиентов 5-10, то без разницы https://msdn.microsoft.com/ru-ru/library/8xx3tyca(v=vs.110).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 14:57 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Cat2, ну и работа в один поток... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 15:12 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Новичок ООП..Вот эта фича мне непонятна, а что разве нельзя Connection всё время держать открытым, и закрывать только при выходе из программы? Не нужно этого делать. А в чем проблема? Накладных расходов нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 15:18 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
hVosttНакладных расходов нет. Ну это не совсем так, но к остальному присоединяюсь... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 15:20 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Накладных расходов нет. , в свое время обжегся на этом... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 15:22 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Новичок ООП..Если сами не сможете объяснить, то хотя бы киньте ссыль на книгу-статью, где обосновывается такая методика. смотри Connection Pooling https://msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.110).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 16:10 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Вообще-то иногда полезно не сразу закрывать соединение. Например. 1. Когда какой-нибудь датчик шлет 100 инсертов в секунду, то лучше вообще не закрывать 2. Когда в начале работы программы закачивается много таблиц, то лучше открыть, закачать все и закрыть. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 16:36 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
buserhVosttНакладных расходов нет. Ну это не совсем так, но к остальному присоединяюсь... Тут дело такое. Если это становится проблемой, значит что-то делается не так. Т.е. многократной открытие/закрытие соединение за короткий промежуток времени выявляет проблему не в работе с соединением, а в логике работы с данными. Слишком мелкие и частые запросы в БД это косяк. Поэтому в целом можно считать, что накладных расходов нет, там есть пул. Зато профит от кратковременной жизни соединения очевиден с точки зрения надёжности. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 16:42 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Cat2Вообще-то иногда полезно не сразу закрывать соединение. Например. 1. Когда какой-нибудь датчик шлет 100 инсертов в секунду, то лучше вообще не закрывать 2. Когда в начале работы программы закачивается много таблиц, то лучше открыть, закачать все и закрыть. Не надо делать 100 инсертов в секунду, надо организовать буффер и инсертить пачками. Не в открытом/закрытом соединении проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 16:43 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
hVosttCat2Вообще-то иногда полезно не сразу закрывать соединение. Например. 1. Когда какой-нибудь датчик шлет 100 инсертов в секунду, то лучше вообще не закрывать 2. Когда в начале работы программы закачивается много таблиц, то лучше открыть, закачать все и закрыть. Не надо делать 100 инсертов в секунду, надо организовать буффер и инсертить пачками. Не в открытом/закрытом соединении проблема. Вот еще. Буду я фигней заниматься и оптимизировать наноскунды . Сервер справляется и ладно ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 22:29 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Cat2Вот еще. Буду я фигней заниматься и оптимизировать наноскунды . Сервер справляется и ладно Смотря какие требования по нагрузке, надёжности, доступности и отказоустойчивости. Если там конь не валялся, никаких требований, лишь бы хоть как-то шевелилось, то ок. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2017, 05:38 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Cat2Вообще-то иногда полезно не сразу закрывать соединение. Например. 1. Когда какой-нибудь датчик шлет 100 инсертов в секунду, то лучше вообще не закрывать Ниже ответили. Да для множественных инсертов есть свои средства. Cat22. Когда в начале работы программы закачивается много таблиц, то лучше открыть, закачать все и закрыть. А вот за "закачивание много таблиц в начале работы" - молотком по пальцам! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2017, 12:20 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
ЕвгенийВА вот за "закачивание много таблиц в начале работы" - молотком по пальцам! вне контекста конкретной задачи - эмоциональная оценка неуместна ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2017, 14:36 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
самое главное, не объяснили автору, почему нужно закрывать. для закрывания подключений есть несколько причин: а) Пул соединений не бесконечный, если их не закрывать, а количество подключений к базе большое, то желательно высвобождать место в пуле, чтоб другие могли подключиться. б) Если забывать закрывать соединение и потом каждый раз будет отрываться новое, пул соединений на сервере переполнится и 'nj приведет к блокинку (скорее всего) и все подключенные к базе клиенты тоже будут иметь проблемы. По этому лучше, когда подключение закрывается примерно там же, где и открывалось. В пределах 1 экрана хотя бы (в коде). Обычно соединение помещают в блок using {}. Когда объект Connection будет Disposed, соединение само закроется в) обычно 1 соединения должны быть открыто в рамках 1 транзакции, так будет проще и удобнее понять, что происходит в рамках этого подключения в будущем. г) если забыть закрыть соединение, то оно может быть закрыто уборщиком, но тут может крыться опасная проблема, закрытие подключения может быть достаточно длительной операцией и если она превысит таймаут сборщика, сборка мусора "упадет", + будут фризы. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2017, 16:04 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
ИзопропилЕвгенийВА вот за "закачивание много таблиц в начале работы" - молотком по пальцам! вне контекста конкретной задачи - эмоциональная оценка неуместнаНе только не неуместна, но и необходима! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2017, 04:43 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
ЕвгенийВА вот за "закачивание много таблиц в начале работы" - молотком по пальцам! Вы вероятно путаете "много таблиц" с "много длинных таблиц". ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2017, 07:22 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Roman Mejtesсамое главное, не объяснили автору, почему нужно закрывать. для закрывания подключений есть несколько причин: а) Пул соединений не бесконечный, если их не закрывать, а количество подключений к базе большое, то желательно высвобождать место в пуле, чтоб другие могли подключиться. Кто это другие? ИМХО великое множество WinForms приложений запускается в одном экземпляре в единицу времени на машине пользователя. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2017, 08:59 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Roman Mejtesб) Если забывать закрывать соединение и потом каждый раз будет отрываться новое, пул соединений на сервере переполнится и 'nj приведет к блокинку (скорее всего) и все подключенные к базе клиенты тоже будут иметь проблемы. По этому лучше, когда подключение закрывается примерно там же, где и открывалось. В пределах 1 экрана хотя бы (в коде). Уточните пожалуйста что Вы имели в виду, когда написали "пул соединений на сервере". ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2017, 09:01 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Roman Mejtesв) обычно 1 соединения должны быть открыто в рамках 1 транзакции, так будет проще и удобнее понять, что происходит в рамках этого подключения в будущем. Кому и где будет проще и удобнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2017, 09:02 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Roman Mejtesг) если забыть закрыть соединение, то оно может быть закрыто уборщиком, но тут может крыться опасная проблема, закрытие подключения может быть достаточно длительной операцией и если она превысит таймаут сборщика, сборка мусора "упадет", + будут фризы. Ни разу такого не встречал. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2017, 09:03 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Cat2ЕвгенийВА вот за "закачивание много таблиц в начале работы" - молотком по пальцам! Вы вероятно путаете "много таблиц" с "много длинных таблиц". какая нафик разница? Сейчас ковыряюсь с говнопроектом, когда то там "для улучшения производительности кешировли" метаданные. При их небольшом количестве и когда БД в локальной сети - занимало несколько сек. Сейчас стало много и БД в тырнете, пинг до сервера >=20 мс и вся гребаная инициализация полчаса занимает. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2017, 11:59 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
ЕвгенийВCat2пропущено... Вы вероятно путаете "много таблиц" с "много длинных таблиц". какая нафик разница? Сейчас ковыряюсь с говнопроектом, когда то там "для улучшения производительности кешировли" метаданные. При их небольшом количестве и когда БД в локальной сети - занимало несколько сек. Сейчас стало много и БД в тырнете, пинг до сервера >=20 мс и вся гребаная инициализация полчаса занимает.Вы - о чём вообще? Что это за поток сознания? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2017, 12:43 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
Арктур МенгскВы - о чём вообще? Что это за поток сознания? Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий.(с) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2017, 15:09 |
|
Совет новичку. На каждый чих открывать конекшн заново?
|
|||
---|---|---|---|
#18+
ЕвгенийВАрктур МенгскВы - о чём вообще? Что это за поток сознания? Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий.(с)До ленивой загрузки писатели не догадались? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2017, 16:24 |
|
|
start [/forum/topic.php?fid=20&fpage=46&tid=1399983]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 165ms |
0 / 0 |