С Новым годом! Форум программистов, компьютерный форум, киберфорум
Web API
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467

Web api, out of memory

26.12.2016, 16:55. Показов 1051. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Имеется вот такой код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public class FileHelper {
        public static string GetHash(FileInfo file) {
            using (var md5 = MD5.Create()) {
                using (var stream = File.OpenRead(file.FullName)) {
                    return BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", string.Empty);
                }
            }
        }
 
        public static List<FileInfo> GetFiles(string path) {
            DirectoryInfo dir = new DirectoryInfo(path);
            List<FileInfo> result = new List<FileInfo>(dir.GetFiles());
            foreach (var subDir in dir.GetDirectories()) {
                result.AddRange(GetFiles(subDir.FullName));
            }
 
            return result;
        }
    }
и такой контроллер

C#
1
2
3
4
5
6
7
8
9
10
    public class FilesController : ApiController
    {
        public ICollection<WidgetFile> Get() {
            var sPath = System.Web.Hosting.HostingEnvironment.MapPath("/Files/");
            return FileHelper.GetFiles(sPath).Where(fi => fi.Name != "launcher.exe" && fi.Name != "launcher_dbg.exe").Select(f => new WidgetFile() {
                Hash = FileHelper.GetHash(f),
                RelativePath = f.FullName.Replace(sPath, string.Empty)
            }).ToArray();
        }
    }
Очень часто получаю out of memory exception. Как отладить не представляю.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.12.2016, 16:55
Ответы с готовыми решениями:

2 сервиса (WCF Web API и ASP.NET Web API) на одном хосте
Есть БД с юзерами Есть консольное приложение (OWIN selfhost) с контроллером ImportController : ApiController для выполнения POST запросов...

Create an in memory bitmap and draw directly to the memory
Здравствуйте! У меня есть пара вопросов. Знаю, что рисовать в HDC можно только с одного потока. Но узнал такую вещь, что можно создать...

Авторизация в Web API
Всем привет. Я использую ASp.NET WEB API и делаю авторизацию к нему. По сути мне нужно только логин/пароль и некоторые поля. Ни ролей...

5
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
26.12.2016, 17:19
У Directory есть маска поиска файлов , которой можно отфильтровать все ненужные.

Добавлено через 5 минут
П.С 1.Рекурсия в данном случае приведет к переполнению стека при глубокой вложенности. ,
2. Большие файлы нужно подгружать в память частями.
3. Учитывая что это веб.запрос , нужно ограничить число потоков на одновременное чтение.
0
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
26.12.2016, 22:59  [ТС]
Цитата Сообщение от sau Посмотреть сообщение
У Directory есть маска поиска файлов , которой можно отфильтровать все ненужные
мне нужны и вложенные, чему маска не поможет
Цитата Сообщение от sau Посмотреть сообщение
П.С 1.Рекурсия в данном случае приведет к переполнению стека при глубокой вложенности.
вложенность не больше второго уровня
Цитата Сообщение от sau Посмотреть сообщение
2. Большие файлы нужно подгружать в память частями.
так файл итак не грузится в память полностью.
Цитата Сообщение от sau Посмотреть сообщение
Учитывая что это веб.запрос , нужно ограничить число потоков на одновременное чтение.
а вот это каким образом?
0
Эксперт .NET
 Аватар для Usaga
14113 / 9330 / 1350
Регистрация: 21.01.2016
Сообщений: 35,055
27.12.2016, 06:51
Цитата Сообщение от jr_ Посмотреть сообщение
а вот это каким образом?
Использовать Semafore.

Цитата Сообщение от jr_ Посмотреть сообщение
так файл итак не грузится в память полностью.
А тут что происходит по твоему:
C#
1
2
3
using (var stream = File.OpenRead(file.FullName)) {
     return BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", string.Empty);
}
1
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
27.12.2016, 07:10  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
А тут что происходит по твоему
так стрим читает файл частями или я не прав?
0
Эксперт .NET
 Аватар для Usaga
14113 / 9330 / 1350
Регистрация: 21.01.2016
Сообщений: 35,055
27.12.2016, 07:40
jr_, да стрим-то читает частями, а вот md5.ComputeHash() фиг знает как это всё использует. Может буферизирует, может ещё чего.

Имеет смысл кешировать результаты этих расчётов, чтобы каждый раз заново всё это не делать.

Добавлено через 19 минут
Вообще, при создании сервиса который вот так плотно может с файлами работать нужно быть очень осторожным.

Попробуй ограничить количество запросов к ФС как выше порекомендовали. И, если можно, кешировать результаты на минуту-другую (а может и дольше).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.12.2016, 07:40
Помогаю со студенческими работами здесь

Маршрутизация в Web.API
Сейчас веб-конфиг настроен так: config.Routes.MapHttpRoute( name: &quot;DefaultApi&quot;, routeTemplate:...

Регистрация в Web API
Если мне нужен проект с web api 2 без использования asp net mvc то систему регистрации делать самому с нуля или можно подключить что то...

Web Api+AngularJs
Добрый день, как сделать вывод данных с Api контролера на страничку api controller using System; using System.Collections.Generic;...

Асинхронность в Web API
У меня есть проект, который представляет собой REST API для управлением локальным хранилищем (по сути просто IEnumerable объект) Это...

Web API Errors
Каким образом можно сделать &quot;собствение&quot; ошибки ( например вместо 404 написать Предмет не найден) но с какимто стилем ( чтото как Вьюшка). ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru