Приложение для анализа размеров папок? c # .net

2

Я создал небольшое приложение, которое позволяет мне выбирать каталог и подсчитывать общий размер файлов в этом каталоге и его подкаталогах.

Он позволяет мне выбирать диск, и это заполняет элемент управления деревом с помощью скоросшивателей, которые я могу подсчитать размер!

Он написан в .net и просто циклически округляется по каталогам, и для каждого каталога складываются размеры файлов.

Он останавливает мой компьютер, когда он запускается, скажем, в папках с окнами или программными файлами.

Я думал о Multi threading, но я этого не делал раньше.

Любые идеи для повышения производительности?

спасибо

Показать ещё 1 комментарий
Теги:

6 ответов

3
Лучший ответ

Ваш код действительно будет запущен, поскольку вы просто используете строки для ссылки на каталоги и файлы. Используйте DirectoryInfo в корневом каталоге; получить список FileSystemInfos из этого с помощью DirectoryInfo.GetFileSystemInfos(); итерация в этом списке, рекурсия для объектов DirectoryInfo и просто добавление размера для объектов FileInfo. Это должно быть намного быстрее.

1

Я просто предлагаю использовать фоновый рабочий для предварительной работы. Вероятно, вы захотите убедиться, что элементы управления, которые не должны использоваться, не являются, но все, что можно использовать, может оставаться пригодным для использования.

Google: http://www.google.com/search?q=background+worker

Это позволит вашему приложению быть многопоточным с некоторой сложностью нескольких потоков. Все было упаковано и удобно использовать.

0

Вы хотите повысить производительность или повысить оперативность системы?

Вы можете увеличить RESPONSIVENESS, поручив приложению spidering периодически запускать цикл очереди сообщений, который обрабатывает перерисовку экрана и т.д. Это позволит вам обновлять ход выполнения, когда он выполняет проверку, в то же время уменьшая производительность (потому что вы, с получением приоритета ЦП).

  • 0
    обе! Я никогда не создавал подобное приложение, поэтому просто ищу помощь / указатели! Спасибо
0

Просто догадайтесь, но я уверен, что ваш удар производительности связан с пользовательским интерфейсом, а не с проверкой файлов. Прокомментируйте код, который создает TreeNode.

Попробуйте не рисовать дерево до завершения сканирования:

Убедитесь, что корневое дерево node для всех ваших файлов НЕ добавлено в дерево. Добавьте всех детей, а затем добавьте верхние узлы node/в самый конец вашей обработки. Посмотрите, как это работает.

0

Попробуйте прокомментировать все части, которые обновляют пользовательский интерфейс, если он все еще замедляет работу с дисковым вводом-выводом, и вы ничего не можете сделать, если быстрее, вы можете обновить интерфейс каждого файла X, чтобы сохранить работу пользовательского интерфейса.

Вы можете сделать свой пользовательский интерфейс отзывчивым, выполнив всю работу в рабочем потоке, но это сделает его немного медленнее.

Дисковый ввод-вывод относительно медленный, он также часто необходим другим приложениям (файл подкачки, временные файлы...), многопоточность не поможет, все файлы находятся на одном физическом диске, и это вероятно, дисковый ввод-вывод является узким местом.

0

Это получает подкаталоги:

 string[] directories = Directory.GetDirectories(node.FullPath);
                    foreach (string dir in directories)
                    {
                        TreeNode nd = node.Nodes.Add(dir, dir.Substring(dir.LastIndexOf("\\")).Replace("\\", ""), 3);
                        if (showItsChildren)
                            ShowChildDirectories(nd, true);
                        size += GetDirectorySize(nd.FullPath);
                    }

Thsi подсчитывает размеры файлов:

long b = 0;

                // Get array of all file names.
                string[] a = Directory.GetFiles(p, "*.*");

                // 2
                // Calculate total bytes of all files in a loop.
                foreach (string name in a)
                {
                    // 3
                    // Use FileInfo to get length of each file.
                    FileInfo info = new FileInfo(name);
                    b += info.Length;
                    IncrementCount();
                }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню