| Предыдущий | Следующий |
| STG_E_PATHNOTFOUND | STG_E_ACCESSDENIED |
STG_E_TOOMANYOPENFILES
Какой ресурс исчерпан
STG_E_TOOMANYOPENFILES — это результат исчерпания ресурсов, а не сообщение о повреждении составного документа. Structured Storage может вернуть его при открытии или изменении хранилищ и потоков, когда процесс или его среда больше не могут получить необходимые дескрипторы. Непосредственной причиной может быть утечка файловых дескрипторов, долгоживущий кэш объектов IStorage/IStream, чрезмерно параллельная обработка документов или достижение ограничения платформы рабочим процессом.
Составные файлы имеют иерархическую структуру. Открытый корневой объект хранилища может также удерживать дочерние потоки, блокировки и состояние базового файла, поэтому подсчёт только объектов документов верхнего уровня способен скрыть утечку.
Как исследовать
- Измеряйте число открытых дескрипторов реального рабочего процесса во времени, особенно после неудачных импортов и путей отмены.
- Освобождайте интерфейсы хранилищ и потоков COM детерминированно; убедитесь, что пути исключений освобождают каждый уже полученный объект.
- Ограничьте параллельную обработку документов вместо одновременного открытия всех элементов очереди.
- Воспроизведите проблему на небольшом фиксированном наборе документов. Постоянный рост числа дескрипторов указывает на управление жизненным циклом, а немедленный сбой при высокой параллельности — на предел ёмкости.
Ссылки
- Microsoft: возвращаемые значения IStorage::OpenStorage
- Apache POI: жизненный цикл POIFS и составные файлы
- OpenMcdf: реализация составных файлов для .NET
Нужно найти другой код? Найти другой код состояния или ошибки.