Различия в производительности при использовании GetDirectories

У меня есть проблема производительности производства, на которой я поставлен в тупик. Я надеюсь, что кто-то видел что-то подобное или, по крайней мере, имеет несколько методов устранения неполадок.

Я поддерживаю унаследованное веб-приложение asp.net, которое извлекает файлы с общего сетевого диска. Одна конкретная папка [назовем ее FOLDERA], которую я выбрал для устранения неполадок, содержит около 300 МБ файлов и несколько подпапок. FOLDERA считается большой для этого приложения. Начиная с недавнего времени пользователи испытывали низкую производительность при получении файлов из FOLDERA в общей сетевой папке. Я сузил код до метода GetDirectories в приложении asp.net.

RootDir.GetDirectories("*", SearchOption.AllDirectories);

В производстве считывание FOLDERA занимает около 8-10 секунд. До недавнего снижения производительности это было около 1 секунды. В тестовой среде это занимает 1-2 секунды с тем же объемом данных.

Моя теория - проблема сети, потому что в те же выходные, когда пользователи замечали проблемы, была та же самая сеть выходного дня, и происходило обновление оборудования. Однако я не знаю, как определить или доказать это сетевым инженерам.

Буду признателен за идеи о том, что может происходить.

1 ответ

Решение

Я использовал тот же точный метод для большого общего каталога, чтобы извлечь и проиндексировать несколько тысяч PDF-файлов (~80000, размер не имеет значения) без проблем с производительностью (1-2 секунды)

Вы можете попытаться сравнить IO из общего файлового ресурса между средами разработки и производства с помощью внешней программы, чтобы подтвердить свою теорию, исключив любые дефекты программного обеспечения и передавая проблему персоналу инфраструктуры.

С другой стороны, вы можете легко кэшировать эту информацию с помощью CacheDependency на стороне сервера, в зависимости от архитектуры приложения. Это резко оптимизировало бы производительность, если бы это было основной функциональностью.

Другие вопросы по тегам