我在 C# 中编写了一个递归目录遍历方法(托管自 asp.net 页面)。代码按我的预期工作(我枚举目标机器上的共享列表,然后通过共享递归并将每个文件/目录添加到 TreeView)。不幸的是,这会消耗大量内存并且需要很长时间才能运行,打开 aspx 页面会导致 Webdev.Webserver 内存使用量飙升至 800 兆字节,而查看该页面的 Chrome 实例消耗了高达 1.5GB 的内存!(针对托管在本地工作站上的 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 对象,这似乎会导致极端的资源使用。我应该创建自己的节点类型以尽可能减少内存使用,还是有另一种技术可以使它可用?