首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归目录遍历/tree会消耗大量内存

递归目录遍历/tree会消耗大量内存
EN

Stack Overflow用户
提问于 2011-05-20 06:06:10
回答 2查看 830关注 0票数 2

我用C# (从asp.net页面托管)编写了一个递归目录遍历方法。代码按照我的预期工作(我枚举了目标机器上的共享列表,然后递归遍历这些共享,并将每个文件/目录添加到一个TreeView中)。不幸的是,这会消耗极大的内存,并且需要很长时间才能运行,打开aspx页面会导致Webdev.Webserver内存使用量激增到800MB,而查看页面的Chrome实例会消耗高达1.5 an的内存!(在我本地工作站上的SMB共享上运行测试代码)如果没有chrome挂起,我甚至无法查看页面源代码。

代码语言:javascript
复制
foreach (TreeNode n in FileSelectList.Nodes)
{
    Dir_Node_Recurse(n, hostName);
    //break;
}

取消对//break;语句的注释会导致只处理第一个目录共享,并且这样消耗的内存要少得多。FileSelectList是一个Asp:TreeView。

代码语言:javascript
复制
public static void Dir_Node_Recurse(TreeNode node, string hostName)
{
        DirectoryInfo dir = new DirectoryInfo(String.Format(@"\\{0}\{1}",
                                                            hostName,
                                                            node.ValuePath.ToString()
                                                           ));
        TreeNode tNode;
        foreach (var i in dir.EnumerateDirectories())
        {
            tNode = new TreeNode(i.Name.ToString());
            node.ChildNodes.Add(tNode);
            Dir_Node_Recurse(tNode, hostName);
        }

        foreach (var i in dir.EnumerateFiles())
        {
            node.ChildNodes.Add(new TreeNode(i.Name.ToString()));
        }
}

由于创建了大量的TreeNode对象,这似乎会导致极端的资源使用。我是否应该创建自己的节点类型来最小化内存使用,或者是否有其他技术可以使其变得有用?

EN

回答 2

Stack Overflow用户

发布于 2011-05-20 06:11:28

有没有需要获取所有节点的原因?你能使用随需应变的方法吗?

您还可以分析代码。您可以尝试将代码指向较小的目录,并观察其行为。

票数 0
EN

Stack Overflow用户

发布于 2011-05-20 06:32:15

你想做什么?

你正在创建一个巨大的页面,并询问如何让它消耗更少的内存?这是显而易见的-不要在页面中显示所有的树,这对任何用户都没有任何用处。

例如,您可以将输出限制为几个级别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6065368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档