|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
В каких случаях надо закрывать поток, а в каких не надо?09.01.2013, 05:36. Показов 4819. Ответов 18
Метки нет (Все метки)
Кашу маслом не испортишь- это не наш метод, сразу говорю
++++++++++++++++++++++++++++++++++++++++ + У меня в книге "Visual C# 2010 ПОЛНЫЙ КУРС " Карли Уотсон, Кристиан Нейгел, ЯкобХаммер Педерсен, Джон Рид, Морган Скиннер Авторы делают это через раз, то закроют, то не закроют и не объясняют, когда надо закрыть, а когда не надо. Если готовых ответов нет, может быть мы вместе разберёмся? Я могу дать коды из этой книги (упрощу, понятное дело) с тем, чтобы люди с намётанным глазом выявили какую-нибудь закономерность в закрытии-незакрытии потоков. Мне никакую закономерность выявить не удалось. Спасибо, кто откликнется
0
|
|
| 09.01.2013, 05:36 | |
|
Ответы с готовыми решениями:
18
В каких случаях необходимо использовать equals, а в каких == String и StringBuilder - что и в каких случаях? В каких случаях нельзя обойтись без событий? |
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 09.01.2013, 07:21 [ТС] | |
|
То есть названные авторы не правы, не закрывая потоки, да?
0
|
|
|
Master of Orion
|
|
| 09.01.2013, 07:36 | |
|
kravam, ну вы покажите, может там какой-нибудь BackgroundWorker, он сам закрывает, когда заканчивает работу. Я все-таки книг не писал и не думаю, что авторы полные идиоты. Если не закрывают, то скорее всего, они просто используют какую-то обертку, которая сама это делает, т.к. потоки это критический ресурс, и надо быть реально тупым, чтобы их бросать просто так (тем более, что программа из-за работающих дочерних потоков часто у людей не закрывается, как раз из-за таких вот "умных" идей написать поменьше кода и не закрыть их нормально). Тем более в авторах Нейгел. Всяко поумнее меня будет. Да и 99% форумчан
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||
| 09.01.2013, 08:50 [ТС] | ||||||
|
код маленький. я решил ничё не убирать.
0
|
||||||
|
Master of Orion
|
|
| 09.01.2013, 09:02 | |
|
kravam, ну вот пример с того же msdn
http://msdn.microsoft.com/ru-r... 10%29.aspx Просто пишите using, он автоматом закроет поток (даже если вылетит эксепшн). А что до этого кода: я склоняюсь к тому, что опечатка. Это довольно серьезная ошибка-таки. Вроде гонки потоков.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||
| 09.01.2013, 09:06 [ТС] | ||||||
|
Опечатка это когда вместо колено пишут полено. Тут что-то другое.
СЛЕДУЮЩИЙ код в этой же книге.
0
|
||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 09.01.2013, 09:16 [ТС] | |
|
Ладно, подождём других мнений.
0
|
|
|
|
|
| 09.01.2013, 09:37 | |
|
Факты:
1. При завершении приложения (всех его потоков) - закрываются все файлы/файловые потоки/соединения с БД/и т.п. 2. Если файловый поток не закрыт явно - скорее всего[*] он будет закрыт при вызове сборщика мусора. (Сборщик мусора вызывает деструктор) 3. Закрытие файлового потока может быть довольно долгой/затратной операцией 4. Если захвачен файловый поток, то другие приложения, не смогут совершать операции с файлом. Возможны исключения, но в общем случае - не смогут. 5. При возникновении критической ошибки в программе/ОС, не закрытый файловый поток, может содержать некорректные данные. Далее, из всех этих фактов разработчик сам должен выбрать стратегию закртытия файловых потоков. Например, если программа очень коротка и выполняется, то смысла явно прописывать закрытие потока мало - после завершения приложения, все равно все закроется/сбросится. Например, если автор книги хочет продемонстрировать работу метода FileStream: seek. То совершенно необязательно раздувать код приложения в книге, и каждый раз явно закрывать поток. [*] Скорее всего, в данном случае означает, что большинство классов из BCL, использующих нативные ресурсы, содержат правильный деструктор, закрывающий файл. Однако это не означает, что при разработке вам никогда не встретятся такие классы, не реализующие данную особенность.
0
|
|
|
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 976
|
||
| 09.01.2013, 09:40 | ||
|
В деструкторе все закроется. Но все равно лучше использовать using
Добавлено через 1 минуту
0
|
||
|
|
||
| 09.01.2013, 09:42 | ||
|
1
|
||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 09.01.2013, 09:47 [ТС] | |
|
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|||||||||||||||||
| 09.01.2013, 09:55 [ТС] | |||||||||||||||||
|
Джефри Рихтер, "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows"
глава 4 "Процессы"
turbanoff, я учёл всё выше сказанное. Поехали дальше:
Так уж и не закрывали бы оба сразу! А теперь аргумент- а зачем поток (aFile) закрывать если он и так закроется в свете этого закрывания не звучит.
0
|
|||||||||||||||||
|
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 976
|
||
| 09.01.2013, 10:02 | ||
|
0
|
||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 09.01.2013, 10:07 [ТС] | |
|
Да, но дядьки-авторы-то не закрывают- ну ладно, там разъяснили что потому не закрывают, что программа вот-вот закончится. Но в последнем примере два потока есть и один закрывают, а другой нет.
Это что вообще?
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 09.01.2013, 10:08 | |
|
Полагаться в этом на ось всё таки не надо, а надо всё закрывать явно.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 09.01.2013, 10:14 | |
|
Если используется "голый" поток, то лучше закрывать всегда. Да, при завершении программы ОС сама позакрывает дескрипторы, но лучше все-таки заиметь привычку делать это самому.
Если используются декораторы потоков (напр., StreamWriter), то достаточно закрывать только самый внешний декоратор - он по цепочке захлопнет всё остальное. Что касается потоков, которые Thread, то при завершении работы приложения автоматом схлапываются только фоновые потоки, а все остальные - нет.
2
|
|
| 09.01.2013, 10:14 | |
|
Помогаю со студенческими работами здесь
19
В каких случаях лучше использовать класс с параметрами? В каких случаях стоит применять метод File.AppendText()?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|