0

以下のコードを使用して、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.
    }
}
4

2 に答える 2