Удалить файл vs каталог + воссоздать производительность
какой способ удаления файлов имеет лучшую производительность?
- удаление каждого файла, или
- удаление всего каталога с файлами сразу и воссоздание каталога
просто отметить, что корневой каталог должен быть все еще там, поэтому я могу сделать:
var photo_files = Directory.EnumerateFiles(item_path, "*.jpg", SearchOption.TopDirectoryOnly);
foreach (var photo in photo_files)
{
File.Delete(photo);
}
или удалите весь каталог, а затем создайте его снова.
сколько разница в производительности будет за 10000 или даже 100000 файлы?
П. С. Сразу уточню, .Нет функции Удалить все файлы в папке сразу и оставить каталог.
5 ответов
при удалении каталога это одна запись в таблицу главного файла диска, в то время как при удалении каждого файла существует операция записи на файл. Таким образом, более эффективно удалить каталог и воссоздать его.
после обмена с @Mr Disappointment я бы предложил следующую поправку к моему ответу:
Если вам нужно сделать это "много", то вы можете создать себе метод расширения, который выглядит так это:
public static class IOExtension
{
public static void PurgeDirectory(this DirectoryInfo d)
{
string path = d.FullName;
Directory.Delete(d.FullName,true);//Delete with recursion
Directory.CreateDirectory(path);
}
}
Так что вы можете просто вызвать это в классе DirectoryInfo...
Directory Info di = new DirectoryInfo(path);
di.PurgeDirectory();
Я бы сказал, что удаление каталога напрямую даст лучшую производительность, но это спекуляция, основанная на одном факторе требований разрешений, запрашиваемых для каждого File.Delete
вызова, в отличие от первоначальной проверки при использовании
Что касается точки зрения производительности, вы можете удалить весь каталог и воссоздать. После отдыха вам нужно только создать директорию.
Что-то, где-то должен удалить все файлы. Если вы не делаете это напрямую, то это должно быть сделано для вас косвенно (например, обстрел и вызов "RmDir /S"). Таким образом, система в целом будет работать примерно одинаково. Производительность приложения может варьироваться в зависимости от того, нужно ли сначала ждать удаления всех файлов.
этот вопрос похож на :" насколько жарко в центре Солнца?"
единственный способ, которым вы будете знать наверняка, это пойти туда. Итак, создайте тестовую упряжь и отправляйтесь туда.
создайте папку и поместите одно и то же изображение в папку 10000 раз. Назовите файл идентификатором guid или чем-то уникальным. Для этого можно написать простую программу.
затем запустите код удаления и время для обоих случаев. Повторите по мере необходимости для подтверждения результатов.
есть .net класс секундомера, который можно использовать для определения времени. Вы также можете использовать среду.tickcount, чтобы получить тайминги.