Что означает код HRESULT 0x80030004 (STG_E_TOOMANYOPENFILES)?

 
Предыдущий Следующий
STG_E_PATHNOTFOUND STG_E_ACCESSDENIED

STG_E_TOOMANYOPENFILES

Какой ресурс исчерпан

STG_E_TOOMANYOPENFILES — это результат исчерпания ресурсов, а не сообщение о повреждении составного документа. Structured Storage может вернуть его при открытии или изменении хранилищ и потоков, когда процесс или его среда больше не могут получить необходимые дескрипторы. Непосредственной причиной может быть утечка файловых дескрипторов, долгоживущий кэш объектов IStorage/IStream, чрезмерно параллельная обработка документов или достижение ограничения платформы рабочим процессом.

Составные файлы имеют иерархическую структуру. Открытый корневой объект хранилища может также удерживать дочерние потоки, блокировки и состояние базового файла, поэтому подсчёт только объектов документов верхнего уровня способен скрыть утечку.

Как исследовать

  • Измеряйте число открытых дескрипторов реального рабочего процесса во времени, особенно после неудачных импортов и путей отмены.
  • Освобождайте интерфейсы хранилищ и потоков COM детерминированно; убедитесь, что пути исключений освобождают каждый уже полученный объект.
  • Ограничьте параллельную обработку документов вместо одновременного открытия всех элементов очереди.
  • Воспроизведите проблему на небольшом фиксированном наборе документов. Постоянный рост числа дескрипторов указывает на управление жизненным циклом, а немедленный сбой при высокой параллельности — на предел ёмкости.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.