Я использую следующий код, начинающийся с пути (root), предоставляемого переменной GET, и рекурсивно перехожу во каждую подпапку и отображает ее содержимое в виде элементов списка. Путь, который я использую, имеет около 3800 файлов и 375 подпапок. Я занимаю около 45 секунд, чтобы сделать страницу, есть ли способ, которым я могу сократить это время, поскольку это неприемлемо для моих пользователей.Рекурсивная структура структуры каталогов, требующая длительного процесса
string output;
protected void Page_Load(object sender, EventArgs e) {
getDirectoryTree(Request.QueryString["path"]);
itemWrapper.InnerHtml = output;
}
private void getDirectoryTree(string dirPath) {
try {
System.IO.DirectoryInfo rootDirectory = new System.IO.DirectoryInfo(dirPath);
foreach (System.IO.DirectoryInfo subDirectory in rootDirectory.GetDirectories()) {
output = output + "<ul><li><a>" + Regex.Replace(subDirectory.Name, "_", " ");
if (subDirectory.GetFiles().Length != 0 || subDirectory.GetDirectories().Length != 0) {
output = output + " +</a>";
} else {
output = output + "</a>";
}
getDirectoryTree(subDirectory.FullName);
if (subDirectory.GetFiles().Length != 0) {
output = output + "<ul>";
foreach (System.IO.FileInfo file in subDirectory.GetFiles()) {
output = output + "<li><a href='" + file.FullName + "'>" + file.Name + "</a></li>";
}
output = output + "</ul>";
}
output = output + "</li></ul>";
}
} catch (System.UnauthorizedAccessException) {
//This throws when we don't have access.
}
}
Ваши пользователи должны видеть все расширенные предметы одновременно? Почему бы вам не получить папки по требованию, когда пользователь нажимает на эту структуру? – Alex
Большая часть вашего удара по производительности будет, вероятно, в дисковой операции ввода-вывода. – Lloyd
@Alex Как я могу это сделать, C# + ASP.NET для меня новичок, я сертифицированный Java-помощник, все еще изучая все аспекты C# + ASP.NET. –