Je veux construire un service win (pas d'interface utilisateur) sur C# que tout ce qu'il fait est: exécuter sur la liste des répertoires et supprimer les fichiers qui plus de X kb. Je veux la meilleure performance,Quelle est la meilleure façon de supprimer le fichier avec condition
quelle est la meilleure façon de le faire? il n'y a pas de fonction async pur pour le fichier de suppression si je veux utiliser async attendre Je conclurai cette fonction comme:
public static class FileExtensions {
public static Task DeleteAsync(this FileInfo fi) {
return Task.Factory.StartNew(() => fi.Delete());
}
}
et appel à cette fonction comme:
FileInfo fi = new FileInfo(fileName);
await fi.DeleteAsync();
je pense à courir comme
foreach file on ListOfDirectories
{
if(file.Length>1000)
await file.DeleteAsync
}
mais cette option, les fichiers supprimer 1 par 1 (et tous les DeleteAsync utiliseront le fil de la Threadpool). donc je gagne pas du async, je peux le faire 1 par 1.
peut-être je pense que pour collecter les fichiers X sur la liste, puis de les supprimer AsParallel
s'il vous plaît aidez-moi à trouver la meilleure façon
La première chose à optimiser serait de filtrer '.Length' * avant * itérer. – Filburt
comme déjà dit Filburt, d'abord obtenir tous les fichiers dans une liste qui répondent à la condition, puis utilisez 'Parallel.ForEach' avec votre méthode de suppression. [MSDN] (https://msdn.microsoft.com/en-us/library/dd992001 (v = vs.110) .aspx) a un exemple –
@MongZhu pourquoi? doyou voulez-vous que je vais sur tous les fichiers et mettre sur ListForDelete puis exécutez à nouveau et supprimer tous les fichiers de la liste? je ne comprends pas ce que vous avez dit et pourquoi – FADI1987