#dart #stream #buffer
Вопрос:
У меня возникли проблемы с потоком, из-за которого в моей системе не хватает памяти.
У меня есть процесс, который должен прочитать все дерево каталогов.
Он считывает каждый каталог с потоком для каждого каталога.
По мере чтения каждого каталога файлы из каталога добавляются в глобальный поток. (т. Е. все файлы из всех каталогов добавляются в один центральный поток).
Глобальный поток считывается другой частью приложения, и мы выполняем операцию с каждым файлом.
Операция занимает некоторое время.
Проблема в том, что глобальный поток становится чрезвычайно большим (gt; 1 ГБ) во время работы приложения.
Файловые операции приостанавливают/возобновляют глобальный прослушиватель, но это не останавливает добавление большего количества файлов в глобальный поток (отсюда и использование памяти).
Таким образом, возникает вопрос, существует ли тип потока, который может заставить метод «добавить» ждать, если поток превысит определенный размер.
Единственная идея, которую я придумал, — это обернуть раковину и сохранить счетчик, который заставляет метод добавления раковин ждать. Я бы предпочел использовать готовое решение, если оно существует.
Поэтому, по сути, я ищу поток с фиксированным размером, который заставляет добавление ждать, когда оно достигнет этого размера.