gpt4 book ai didi

c# - 递归目录遍历/树消耗大量内存

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:45 26 4
gpt4 key购买 nike

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

foreach (TreeNode n in FileSelectList.Nodes)
{
Dir_Node_Recurse(n, hostName);
//break;
}

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

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 对象,这似乎会导致极端的资源使用。我应该创建自己的节点类型以尽可能减少内存使用,还是有另一种技术可以使它可用?

最佳答案

是否有理由需要获取所有节点?您可以使用按需方法吗?

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

关于c# - 递归目录遍历/树消耗大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6065368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com