Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
4 / 4 / 0
Регистрация: 06.03.2018
Сообщений: 225

Освобождение памяти в веб-сервисе

01.04.2024, 14:32. Показов 1790. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такая проблема: в веб-сервисе загружается файл пакетами, файл потом обрабатываются и сильно повышают потребление памяти процессом. В веб-сервисе используются библиотеки других команд, по обработке файлов и подозрение на эти библиотеки. Повлиять на на них очень сложно. Будем считать что веб-сервис ни в чем не виноват, а виноваты эти библиотеки и без этих библиотек не обойтись и пофиксить в этих библиотеках нет возможности.
У клиентов есть визуальные средства контроля ресурсов и они сразу видят, что веб-сервис потребляет много памяти и это их напрягает.
Проблема в том что мне надо наглядно показать что веб-сервис отработал и освободил память.
Из идей только одна: в веб-сервисе оставить только функциональность приема пакета данных и сохранение этих данных во временный файл на сервере (так щас и работает). А всю функциональность по обработке этого файла (там на самом деле очень много работы делается с этим файл, я для простоты говорю что это обработка файла) вынести в серверную задачу и запускать эту задачу из веб-сервиса, а после выполнения работы убивать задачу и память освобождать таким образом.
Может у кого-нибудь будут идеи получше?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.04.2024, 14:32
Ответы с готовыми решениями:

Авторизация в веб сервисе
Добрый день. Подскажите, бьюсь уже второй день. Есть веб-сервис, авторизация проходит по сертификату. По условию нужно, чтобы доступ...

Не работает IP на Веб-сервисе
Всем доброго времени суток!!!!!!! Есть написано приложение при помощи веб-сервиса WCF. Так от, хочу погонять данные по интернету, но ...

Сортировка слиянием в веб сервисе
Задаем 2 массива и объединяем в 1 отсортированный. Если максимальный элемент в этих двух массивах находится в массиве 1, то не работает, а...

26
 Аватар для Andrey-MSK
3375 / 2261 / 388
Регистрация: 14.08.2018
Сообщений: 7,666
Записей в блоге: 4
02.04.2024, 12:27
Студворк — интернет-сервис помощи студентам
Alim96, Вы статью прочитали? Там хорошо всё рассказано и можно понять, что на расход памяти можно забить. Оно само там всё работает и когда надо очищается. Запустите несколько копий и проследите как будет меняться выделение памяти для процесса. Если не будет хватать памяти какому нибудь процессу, GC начнёт очистку сам...

Добавлено через 13 минут
Alim96,
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
что на расход памяти можно забить
Предварительно убедившись что нет утечек памяти из-за ошибок.
1
13 / 11 / 2
Регистрация: 03.12.2017
Сообщений: 22
02.04.2024, 13:13
Ограничивать объем GC почти всегда плохая идея.
Вмешиваться в работу GC не надо, не ваш случай

Скорее всего проблема происходит из-за больших объектов, которые вы загружаете в память.
Большие объекты НАДОЛГО помещаются в Large Object Heap (LOH).
GC очень не любит чистить LOH, это долго и 'дорого'.
Поэтому он и не будет чистить LOH так долго, как только может (и это правильно).
(Приложение можешь съесть до 70% доступной памяти на устройстве и это в пределах нормы)

Если приложение не крашится, то оно нормально работает.

Но оптимизировать можно.
Попробуйте не создавать большие объекты (почти всегда это очень большие string).
Возможно вам помогут стримы, структура Span<T>, StringBuilder или если есть возможность редактировать файл выборочно (по строкам, блокам) то поступайте так.
2
4 / 4 / 0
Регистрация: 06.03.2018
Сообщений: 225
02.04.2024, 15:11  [ТС]
Andrey-MSK, статью конечно читал. Прежде чем сюда написать она попадалась мне часто.
Я просто решил еще поспрашивать че можно сделать. Потому что просто забить всегда можно)

Добавлено через 18 секунд
А так всем спасибо за помощь и советы
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
02.04.2024, 18:31
Цитата Сообщение от Alim96 Посмотреть сообщение
еб-сервис ни в чем не виноват, а виноваты эти библиотеки и без этих библиотек не обойтись и пофиксить в этих библиотеках нет возможности.
Выносите работу с библиотеками в отдельный процесс: запустился, обработал файл, вернул в родительский процесс что надо, схлопнулся.

Добавлено через 44 секунды

Не по теме:

Цитата Сообщение от kolorotur Посмотреть сообщение
еб-сервис
Цитату не полностью выделил, а исправить теперь рука не поднимается...

2
03.04.2024, 05:22

Не по теме:

kolorotur, а ведь это очень ёмкое и красочное название для большинства тех сервисов, с которыми мне сталкиваться приходилось)))

0
4 / 4 / 0
Регистрация: 06.03.2018
Сообщений: 225
03.04.2024, 07:42  [ТС]
kolorotur,
Цитата Сообщение от Alim96 Посмотреть сообщение
Из идей только одна: в веб-сервисе оставить только функциональность приема пакета данных и сохранение этих данных во временный файл на сервере (так щас и работает). А всю функциональность по обработке этого файла (там на самом деле очень много работы делается с этим файл, я для простоты говорю что это обработка файла) вынести в серверную задачу и запускать эту задачу из веб-сервиса, а после выполнения работы убивать задачу и память освобождать таким образом.
примерно об этом я и говорил тут
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
08.04.2024, 23:31
Цитата Сообщение от Alim96 Посмотреть сообщение
Может у кого-нибудь будут идеи получше?
Без четкого понимания что отжирает память -- не подсказать. Вариантов может быть несколько:
1. Там всё оптимально, просто сама задача жрет много ОЗУ. Маловероятно, но исключать стоит только после разбора.
2. Виновата либа. Идеально -- переписать. Менее идеально -- ваш вариант с отдельным процессом, который будет стартовать, выдавать результат и высвобождать ресурсы после. Проблема в том что внедрение не тривиально (межпроцеросный обмен данными не самая простая задача), да и потенциально можете назапускать 100500 висяков что уже 100% приговорит сервак.
3. Либа не причем. Из вариантов не правильное использование (скажем забыли какой-нибудь Dispose или Clear), либо вообще утечка в другом месте (кеш какого-нибудь sql).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.04.2024, 23:31

Подключение к MySQL кодом в веб сервисе
Здравствуйте. Необходимо подключиться и использовать MySQL в visual studio 2010 (работаю на basic), а именно при создании веб сервиса,...

Типы элементов коллекции в веб-сервисе ЕФРСБ
Всем привет! Помогите, плиз!!! Как узнать какого типа следующая запись в массиве? У меня метод GetDebtorsByLastPublicationPeriod...

Сложности с переносом метода из сервиса в клиент в веб-сервисе
Есть веб сервис &quot;Service.cs&quot; и клиент &quot;Form.cs&quot;(windows form). Не получается перенести метод из сервиса в клиент (при выводе массива пишет...

Консольное и Windows Forms приложение в веб-сервисе XML
Написать консольное и windows form приложение для программы - Каждый Web-метод сервиса выполняет одну из арифметических операций

Работа с прогресс баром на веб-сервисе + хранимка на postgresql
Здравствуйте, друзья. Проблема состоит в следующем: 1) Проект долго запускается,так как в нём веб-сервис и получается пока поднимется iis...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru