У меня есть структура папок на сетевом диске, которыйC# каталога производительность сканирования
Центр Бронирования -> Объект -> Файлы
например
- EUR/12345678/File_archive1.txt
- EUR/12345678/File_archive2.txt
- EUR/12345678/File_latest.txt
- EUR/5555/File_archiv e1.txt
- EUR/5555/File_archive2.txt
- EUR/5555/File_latest.txt
Когда пользователь выбирает центр бронирования из выпадающего списка, я хочу код, чтобы посмотреть в приведенном выше сетевой путь для этого центра бронирования, посмотреть все подпапки и найти самый последний файл в каждой из подпапок и использовать его для заполнения списка портфелей для второго раскрывающегося списка. Это невероятно медленно, хотя мой код приведен ниже. Может ли кто-нибудь предложить более быстрый подход?
public IDictionary<string, Portfolio> ReadPortfolios()
{
var portfolios = new Dictionary<string, Portfolio>();
var di = new DirectoryInfo(PortfolioPath);
var possibleFacilities = di.GetDirectories();
foreach (var possibleFacility in possibleFacilities)
{
try
{
if (possibleFacility.GetFiles().Any())
{
var mostRecentFile = possibleFacility.GetFiles().OrderBy(file => file.LastWriteTimeUtc).Last();
var portfolio = UnzipAndReadPortfolio(mostRecentFile);
if (portfolio == null) continue;
portfolios.Add(possibleFacility.Name, portfolio);
}
}
catch (Exception ex)
{
Console.WriteLine(@"Failed to read portfolio: " + ex.Message);
}
}
return portfolios;
}
Возможно, вы можете выполнить «Анализ производительности» в Visual Studio, чтобы проверить, какой метод работает медленно? Если вы прокомментируете «UnzipAndReadPortfolio», это быстрее? – Odrai
Вы перечисляете два раза possibleFacility.GetFiles() – schglurps
Не могли бы вы предварительно вычислить и кешировать словарь результатов, а не пересчитывать его каждый раз, когда выпадающий список выбран? –