Различия в производительности при использовании 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 на стороне сервера, в зависимости от архитектуры приложения. Это резко оптимизировало бы производительность, если бы это было основной функциональностью.