`EnumerationOptions` — это класс, предоставляемый в .NET Standard 2.1 и выше, который предлагает больше гибкости при работе с методами для перечисления файлов и директорий, такими как `Directory.GetFiles`, `Directory.EnumerateFiles` и другие. Этот класс позволяет установить несколько параметров для тонкой настройки процесса перечисления.
### Основные свойства:
1. **RecurseSubdirectories**: аналогично `SearchOption.AllDirectories`, управляет рекурсивным перечислением поддиректорий.
2. **MatchType**: тип сопоставления (обычно `Simple` или `Win32`).
3. **MatchCasing**: регистрозависимость при сопоставлении (обычно `CaseInsensitive` или `CaseSensitive`).
4. **BufferSize**: размер буфера для чтения каталогов.
5. **IgnoreInaccessible**: при значении `true` методы будут игнорировать недоступные директории, не вызывая исключения.
6. **ReturnSpecialDirectories**: возвращает или не возвращает специальные директории (например, `.` и `..` в Unix-системах).
### Пример использования:
```csharp
var options = new EnumerationOptions
{
RecurseSubdirectories = true, // Рекурсивный обход
MatchType = MatchType.Simple, // Простое сопоставление
BufferSize = 4096, // Размер буфера в байтах
IgnoreInaccessible = true // Игнорировать недоступные директории
};
var files = Directory.GetFiles("/path/to/directory", "*.txt", options);
```
### Производительность:
- **RecurseSubdirectories**: Как и в случае с `SearchOption`, рекурсивный обход может быть медленнее и требовать больше ресурсов.
- **BufferSize**: Увеличение размера буфера может улучшить производительность за счет уменьшения числа обращений к файловой системе, но это потребует больше памяти.
- **IgnoreInaccessible**: Может улучшить производительность, избегая лишних исключений и проверок доступа.
В целом, `EnumerationOptions` предоставляет более гибкие средства для оптимизации производительности, чем простое использование `SearchOption`. Вы можете тонко настроить параметры, чтобы они соответствовали конкретным требованиям вашего приложения.