|
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
|
|||||||||||
.NET 4.x Огромное потребление памяти19.12.2016, 07:01. Показов 1940. Ответов 15
Метки нет (Все метки)
Консольная программа запускается на Ubuntu server 14.04 под mono 4.6.2 в фоновом режиме
При запуске начинает выедать огромными порциями память (при запуске приложение получает данные из базы и прогоняет их в цикле Parallel.For) потребление доходит порой до 4 гигов и Linux убивает приложение. После прохода цикла и при дальнейшей работе потребление на отметке в 100-300 мб. Есть ли какой-то способ ограничить максимальное потребление памяти (чтобы тот же сборщик чаще вызывался, падение производительности абсолютно не важно, мне без разницы пройдет цикл за минуту или за 10)? Разумеется запускается с флагом --gc=sgen
, создаваемые классы Dispos-ятся (все они являются наследниками от IDisposable), варианта не использовать коллекции (List,Dictionary) попросту нет, ибо количество данных всегда рандомно.ps: Конструкция вида:
0
|
|||||||||||
| 19.12.2016, 07:01 | |
|
Ответы с готовыми решениями:
15
Потребление памяти Потребление памяти и ресурсов процессора
|
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|||
| 19.12.2016, 08:07 | |||
|
0
|
|||
|
14103 / 9320 / 1349
Регистрация: 21.01.2016
Сообщений: 35,015
|
|
| 19.12.2016, 08:12 | |
|
Hermein, как уже верно заметили, скорее всего имеет место быть куча "висячих" ссылок. Где-то в коде (наверняка в упомянутом выше цикле) в коллекцию набиваются данные и остаются там даже после того, как становятся ненужными.
Нужно внимательно изучить код или пройтись профилировщиком.
0
|
|
|
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
|
|||||||
| 19.12.2016, 08:22 [ТС] | |||||||
Добавлено через 8 минут В дополнение повторюсь - при старте ест очень много, после первого прогона перестает кушать в таких масштабах, думаю мало ли кто сталкивался и знает решение проблемы.
0
|
|||||||
|
14103 / 9320 / 1349
Регистрация: 21.01.2016
Сообщений: 35,015
|
|||
| 19.12.2016, 08:24 | |||
|
Добавлено через 54 секунды
0
|
|||
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
||
| 19.12.2016, 08:28 | ||
|
0
|
||
|
|
||
| 19.12.2016, 08:40 | ||
|
Usaga, кстати вопрос: а как вообще можно отследить висящие ссылки?
Ну, к примеру, открыто у меня одно окошко, а перед этим я наоткрывал и назакрывал кучу дочерних, насоздавал и вроде назакрывал кучу потоков в async. Добавлено через 1 минуту
0
|
||
|
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
|
||||||||
| 19.12.2016, 09:03 [ТС] | ||||||||
|
Если образно то:
ps: при запуске на маке такой проблемы нет, возникает при запуске на Ubuntu Server 14.04, версии mono одинаковые Добавлено через 4 минуты забыл добавить: после Thread.Sleep идет цикл foreach по list и вызывает Dispose, после прохода коллекция очищается (list.Clear() и собственно цикл начинается заново
0
|
||||||||
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|
| 19.12.2016, 09:05 | |
|
А можно узнать чему равно
o в 28 строке?
0
|
|
|
14103 / 9320 / 1349
Регистрация: 21.01.2016
Сообщений: 35,015
|
|
| 19.12.2016, 09:38 | |
|
skilllab, профилировщики такую детальную информацию не предоставляют. Вывод о наличие "висяков" можно сделать глянув на расход памяти - если он постоянно растёт, то имеет место "зависание" ссылок. Единственное, что профилировщики позволяют посмотреть каких типов объекты создаются, примерно где, и сколько. От этого уже и плясать. К примеру увидев, что у тебя есть пятнадцать объектов
MyUberClass, хотя ты в логику закладывал создание только одного, можно сделать выводы.Я для профилировки пользовался такой бесплатной штукой от майкрософт - CLR Profiler. Это была боль. Но даже оно мне иногда показывало удивительные вещи (типа того: замена Console.WriteLine(someString + "r\n") на Console.WriteLine(someString);Console.Wr iteLine("r\n") приводило к экономии сотни мегабайт памяти перерабатываемой сборщиком). Думаю платные профилировщики могут на порядок больше, но я ими не пользовался, ибо особой необходимости не было. Добавлено через 24 минуты Hermein, я думаю, что если ты сможешь порезать свой проект до минимума на котором проблема воспроизводится и выложить на форум, то добрые люди (с виндой) с удовольствием посмотрят и попрофилируют. По крайней мере, это намного интереснее, чем сортировать файлы и создавать класс Student.
2
|
|
|
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
|
|
| 21.12.2016, 03:38 [ТС] | |
|
Usaga, а что если выпиливать по-1 классу из проекта чтобы определиться где поедает?
0
|
|
|
14103 / 9320 / 1349
Регистрация: 21.01.2016
Сообщений: 35,015
|
|
| 21.12.2016, 03:50 | |
|
Hermein, насколько я понял по твоему описанию, потребление памяти находится где-то в районе чтения данных из БД и обработки их в параллельном цикле. Вот там и нужно копаться. Рандомно что-то резать - неэффективно и бессмысленно.
Может у тебя запросы фиговые и ты всю базу за раз выгребаешь? Или ещё чего странного делаешь. Гадать можно долго. Давай код.
0
|
|
|
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
|
|
| 21.12.2016, 08:37 [ТС] | |
|
Usaga, Именно на моменте обработки и именно на старте приложения, 10 классов авторизации/парсинга/обработки, около 250 методов, так что я подумал что проще вырезать по-1 классу (либо все и вставлять по-1), но не очень уверен в эффективности метода. А так у меня проект модульный и убрать/добавить класс нет никаких проблем.
0
|
|
|
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
|
|
| 21.12.2016, 08:59 [ТС] | |
|
Usaga, почему же? Оставить только авторизацию, а все остальное отрубить и посмотреть как себя будет вести - если так же, то проблема явно в авторизации (есть такие сомнения, так как ответ проходит через 2-3 десятка public static void методов)
0
|
|
|
14103 / 9320 / 1349
Регистрация: 21.01.2016
Сообщений: 35,015
|
|
| 21.12.2016, 09:07 | |
|
Hermein, потому, что посмотреть и проанализировать результаты профилирования будет на порядки быстрее. Единственный грамотный подход. Не нужно ерундой заниматься.
![]() Добавлено через 1 минуту Просто выбор кусков кода на "отрубание" основывается на догадках, предположениях и рандоме. А так ты точно увидишь, что у тебя там-то и там-то создаёт дохреналион объектов, которых, по идее, должно быть пять (к примеру).
0
|
|
| 21.12.2016, 09:07 | |
|
Помогаю со студенческими работами здесь
16
Большое потребление памяти при вызове метода огромное потребление памяти Оптимизировать потребление памяти растёт потребление памяти Чрезмерное потребление оперативной памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|