Я написал рекурсивный метод обхода каталога в C # (размещен на странице asp.net). Код работает, как я и предполагал (я перечисляю список общих ресурсов на целевой машине, затем перенаправляю их через общие ресурсы и добавляю каждый файл / каталог в TreeView). К сожалению, это потребляет чрезмерное количество памяти и занимает очень много времени для запуска, открытие страницы aspx приводит к тому, что использование оперативной памяти Webdev.Webserver увеличивается до 800 мегабайт, а экземпляр Chrome, просматривающий страницу, потребляет колоссальные 1,5 ГБ ОЗУ! (запуск тестового кода для общих ресурсов SMB, размещенных на моей локальной рабочей станции) Я даже не могу просмотреть исходный код страницы без зависания хрома.
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. Должен ли я создать свой собственный тип узла, чтобы, возможно, минимизировать использование памяти, или есть другой метод, который сделает это пригодным для использования?