Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Использование Using / 12 сообщений из 12, страница 1 из 1
27.01.2017, 13:54
    #39393034
Valery_B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Using
Код: sql
1.
2.
3.
Ключевое слово using имеет два основных применения.
1. В качестве директивы, когда оно используется для создания псевдонима пространства имен или импорта типов, определенных в других пространствах имен. См. раздел Директива using.
2. В качестве инструкции, когда оно определяет область, в конце которой объект будет удален. 


Меня интересует п2.

Скажите, на сколько это актуально для Вэб серверов, например, после запроса к БД ?
Надо ли лихорадочно использовать Using или оставить всё на усмотрение GC ?
...
Рейтинг: 0 / 0
27.01.2017, 14:09
    #39393052
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Using
Valery_BСкажите, на сколько это актуально для Вэб серверов, например, после запроса к БД ?

Для веб-серверов, если объект должен жить в контексте запроса, то используются DI-контейнеры, которые реализуют using на более высоком уровне.

Это не означает, что using не может использоваться для объектов с очень коротким жизненным циклом.


Valery_BНадо ли лихорадочно использовать Using или оставить всё на усмотрение GC ?

При чём тут GC? У using немного другая задача, отличающаяся от задач GC.
...
Рейтинг: 0 / 0
27.01.2017, 14:21
    #39393060
Valery_B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Using
hVosttПри чём тут GC? У using немного другая задача, отличающаяся от задач GC.
У них задача - освободить память.
Если я правильно понимаю, new SQLConnection будет удалён через интерфейс IDisposable после использования Using
Если не использовать Using, то он будет удалён GC, когда тот захочет.
...
Рейтинг: 0 / 0
27.01.2017, 14:53
    #39393113
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Using
Valery_BhVosttПри чём тут GC? У using немного другая задача, отличающаяся от задач GC.
У них задача - освободить память.
Если я правильно понимаю, new SQLConnection будет удалён через интерфейс IDisposable после использования Using
Если не использовать Using, то он будет удалён GC, когда тот захочет.

1. ну не совсем удален сразу, через Using уберется хедлер на соединение и оно вернется в пул соединений, объект SQLConnection удалиться позже так как на него не будет ссылок уже самими CG, в рамках Connection пул конекшенов ограниченный и вызывать dispose в рамках операции следуют и не надеется на CG.
2. SQLConnection возможно и удалиться сам посредством CG, я внутренности не помню уже, но крайне рекомендую. но когда пишешь свои классы которые используются неуправляемые ресурсы, реализовать IDisposable надо по причине что финализатор не знает о внутренних ресурсах ничего, он вызовет финализатор и все, привет утечки памяти. ну ты можешь конечно в финализаторе вызвать dispose каждого объекта, но по первой причине управляют такими ресурсами руками либ посредством IOC.
...
Рейтинг: 0 / 0
27.01.2017, 15:31
    #39393161
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Using
Valery_B,
имхо add
3. На собственные нужды.
по моему в transactionscope, и в еще одном хитром типе.
...
Рейтинг: 0 / 0
27.01.2017, 16:24
    #39393239
Valery_B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Using
Так в частности на SQLConnection надо ставить Using ?
...
Рейтинг: 0 / 0
27.01.2017, 16:59
    #39393301
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Using
Valery_B,

видишь IDisposable ставь
...
Рейтинг: 0 / 0
27.01.2017, 17:17
    #39393321
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Using
Valery_BУ них задача - освободить память.
Если я правильно понимаю, new SQLConnection будет удалён через интерфейс IDisposable после использования Using
Если не использовать Using, то он будет удалён GC, когда тот захочет.

Неправильно. У using задача вызвать Dispose у объекта при выходе из блока. У Dispose задача, освободить ресурсы (не память!). У GC задача, собрать мусор и очистить память.

Рекомендую осознать строгую разницу.
...
Рейтинг: 0 / 0
28.01.2017, 10:55
    #39393662
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Using
Valery_BТак в частности на SQLConnection надо ставить Using ?
Если в web, то да. Иначе рискуете выбрать пул и начнут сыпаться исключения и приложение перестанет работать.
...
Рейтинг: 0 / 0
29.01.2017, 00:58
    #39393919
ntkrnlmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Using
Valery_B,

Надо. И SQLConnection, и FileStream, и вообще все, что реализует IDisposable и больше не требуется надо диспозить.

Надо понимать, что помимо памяти, некоторые объекты используют еще и другие виды ресурсов. Например, те же подключения к БД. И если вы не закрывали подключение вручную, то оно будет закрыто только в момент выполнения финализатора. Но когда это случится - неизвестно.
...
Рейтинг: 0 / 0
30.01.2017, 10:04
    #39394395
Valery_B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Using
ntkrnlmpValery_B,
Надо понимать, что помимо памяти, некоторые объекты используют еще и другие виды ресурсов.
Так я это понимаю...
По этому у меня везде написано так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
   try
    SQLConnection1.Open();
    {...}
   finally
    {
     SQLConnection.Close();
    }
...
Рейтинг: 0 / 0
30.01.2017, 12:04
    #39394498
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование Using
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Использование Using / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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