|
|
|
Освобождение памяти в потоках03.01.2012, 13:07. Показов 4854. Ответов 8
Метки нет (Все метки)
Доброго времени суток. Помогите пожалуйста, товарищи программисты. Приложение может создавать от 1 до N параллельных одновременно работающих потоков (стандартно до 10-15) по ОДНОМУ НАПРАВЛЕНИЮ. "Одно направление" - это тоже поток. Направлений до 10. То есть я имею порядка 10 потоков, внутри каждого из которых создаётся ещё масса потоков, но что бы не убить систему сразу, используется пул потоков, который контролирует максимально возможное кол-во работающих потоков одновременно. Проблема в том, что по задумке внутренние потоки создаются, и, доходя до своего логического конца, самоуничтожаются (так я думаю), но беда в том, что объём используемой оперативной памяти, не смотря на это, только растёт, и растёт довольно быстро. Так вскоре забивается вся оперативная память (6 гб) и я даже не знаю что и делать... Такое впечатление, что потоки после завершения работы, используемые ресурсы не удаляют за собой (либо сборщик мусора не делает этого).
Как бы то ни было, потоки создаются и успешно завершаются в пуле, но память продолжает забиваться и забиваться, без освобождения... Помогите пожалуйста, что с этим можно сделать?
0
|
|
| 03.01.2012, 13:07 | |
|
Ответы с готовыми решениями:
8
Освобождение памяти Выделение/освобождение памяти Выделение и освобождение памяти |
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 03.01.2012, 13:21 | |
|
Дело, скорее всего, не в потоках, а в том, что вы где-то храните ссылки на создаваемые объекты, которые потом не выходят из области видимости, в результате чего сборщик их не подчищает.
Покажите код - будет намного проще разобраться в проблеме.
0
|
|
|
|
|
| 03.01.2012, 13:44 [ТС] | |
|
Код большой, и я боюсь, что вы не разберётесь, я ещё не везде комменты поставил... Вот, попробуйте пожалуйста: KataLOG.rar (не знаю как правильно прикручивать файлы, сделал так)
0
|
|
|
|
|
| 03.01.2012, 13:59 [ТС] | |
|
Смысл программы такой:
1. "заходит" на сайт интернет-магазина, списывает "каталоги" в checklistbox1 и предлагает пользователю выбрать, какие необходимы каталоги. После выбора работа продолжается с выделенными каталогами. 2. на каждый каталог создаётся поток в котором: 2.1. заходит на страничку каталога, находит товар на странице. Нашел - отправляет ссылку на этот товар в ещё один новый поток: 2.1.1. этот поток находит всю необходимую инф-ю и добавляет её в БД 2.2. ищет ещё товары, которых обычно ооочень много p.s. пул потоков реализован вручную (знаю что очень некрасиво и некачественно, но дело не в нём).
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||||||||||||
| 04.01.2012, 10:47 | |||||||||||||||||
|
Я не буду комментировать организацию и синхронизацию (точнее, ее отсутствие) потоков - вы ее сами хорошо описали в своем последнем сообщении, но вот что сразу же бросается в глаза - это создание кучи соединений с БД и веб-клиентов, ресурсы которых не освобождаются должным образом через вызов методоа Dispose. Например:
Возможно, в коде имеются еще скрытые утечки, связанные с "потерянными" потоками. Это легко проверить, включив в диспетчере задач колонку "Threads" и наблюдая за количеством потоков. Если оно постепенно растет, значит какой-то поток не завершается или теряется.
1
|
|||||||||||||||||
|
|
|
| 04.01.2012, 13:31 [ТС] | |
|
Сделал как Вы порекомендовали, но память как росла вверх неумолимо, так и растёт... Возможно лишь теперь не так быстро, но толку от этого мало =(...
Добавлено через 18 минут Судя по монитору процессов, количество потоков достигает некоторого значения (при двух направлениях 21-29) и не превышает его. То есть процессы успешно закрываются, но, память не освобождается. Попытался внести GC.Collect() - не помогает.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 04.01.2012, 13:32 | |
|
Прицепите код с внесенными изменениями - будем смотреть что дальше.
0
|
|
|
|
|
| 04.01.2012, 13:40 [ТС] | |
|
Что-то мне подсказывает что придется всю программу с нуля делать заного и теперь уже что-то новое учитывать... в данном случае - память... уже 4-й или 5-й раз будет, сбился со счета...
Попробовал использовать Dispose на объекты классов типа Webclient - безрезультатно.
0
|
|
|
|
|||||||||||
| 04.01.2012, 14:41 [ТС] | |||||||||||
|
Нашел интересную информацию:
http://www.gotdotnet.ru/forums... post588405 Добавил себе
Хотя, как утверждает диспетчер задач, приложение кушает 50% ЦП. Система работает без изменений... Интересно - проблема решена? =) Добавлено через 11 минут До сих пор программулина работает в штатном режиме =) то есть всё достаточно стабильно держится и добавлено более 450 товаров в бд при обработке пока что одного только направления в котором 5-6 потоков. То есть суммарно приложение делает 7-8 потоков (1 основной главный поток, 1 первый параллельный на направление, 5-6 на товары направления). Все показатели без изменений. Вроде здорово. Добавлено через 37 минут Не знаю, будет ли продолжение темы, но, тем не менее, СПАСИБО большое, kolorotur, за помощь!
2
|
|||||||||||
| 04.01.2012, 14:41 | |
|
Помогаю со студенческими работами здесь
9
Освобождение памяти объекта подписанного на событие Освобождение памяти от переменных (или динамические переменные)
Освобождение памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
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 с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|