2012-02-27 4 views
1

Est-ce que quelqu'un sait comment exécuter File.Delete et Directory.Delete?File.Delete et Directory.Delete performances réseau

Je veux dire: que se passe-t-il si je supposais que je devais supprimer certains fichiers/dossiers sur le réseau et que le réseau est considérablement lent?

Remplirait-il aussi vite que ce serait le cas localement? Consommez-vous plus de bande passante que de déplacer des fichiers vers cet emplacement réseau?

+2

Comment une opération de suppression « consommer plus de bande passante » qu'une opération de déplacement? De quel type de bande passante parlez-vous exactement? – spender

+0

Je sais que c'est un non-sens de comparer déplacer et supprimer. Mais j'aimerais simplement savoir combien de temps d'exécution supprimer se compare à un mouvement. J'aurais dû le rendre plus clair – RavenXV

Répondre

1

Ce ne sera pas aussi rapide que ce serait le cas localement. Ce serait lent, avec une latence qui dépend des conditions de votre réseau.

Vous n'envoyez pas votre commande Delete "à distance" à une "extrémité intelligente" qui sait, disons, supprimer un dossier comme une opération atomique. Votre code s'exécute réellement contre l'emplacement de réseau qui est "bête" et supprime le fichier par fichier. En ce qui concerne votre dernière question, Delete est presque toujours plus rapide que Move

Lorsque vous déplacez des fichiers sur des disques (et bien sûr sur des emplacements réseau), il s'agit en fait d'une opération de copie (avec une suppression à la fin).

0

Ils s'exécutent tous deux de manière synchrone, c'est-à-dire qu'ils attendent tous les deux que la tâche se termine avant de renvoyer le contrôle à l'appelant. Ainsi, les appeler pour supprimer des fichiers ou des répertoires sur un réseau prendrait plus de temps.

0

Ils utilisent essentiellement les API Win32 natives correspondantes qui signifie que la performance est à peu près la même que celle d'une application native (pas de différence réelle entre .NET et natif) ...

Fondamentalement tous les fichiers E/S est plus lent lorsque cela est fait sur le lecteur réseau/chemins/partages - donc: oui, ils seront plus lents par rapport à la même opération exécutée localement. Combien plus lent dépend de plusieurs aspects, y compris (mais sans s'y limiter) la latence du réseau, serveur, les performances du système de fichiers, etc.

+0

Pas mal la question, et oui, il est beaucoup plus lent de supprimer sur le réseau que localement. – TomTom

+0

@ TomTom Je suppose que vous n'avez pas lu le deuxième paragraphe de ma réponse? – Yahia

+0

@TomTom un autre point: la première partie de la question de l'OP porte sur "comment ils exécutent" ce que j'ai répondu au premier paragraphe et le reste de la question concernait le performane auquel j'ai répondu dans le deuxième paragraphe ... – Yahia

1

Ils ont tous deux appel dans le api win32 pour faire le travail,

Ceci est du réflecteur 7:

[SecuritySafeCritical] 
public static void Delete(string path) 
{ 
    if (path == null) 
    { 
     throw new ArgumentNullException("path"); 
    } 
    string fullPathInternal = Path.GetFullPathInternal(path); 
    new FileIOPermission(FileIOPermissionAccess.Write, new string[] { fullPathInternal }, false, false).Demand(); 
    if (!Win32Native.DeleteFile(fullPathInternal)) 
    { 
     int errorCode = Marshal.GetLastWin32Error(); 
     if (errorCode != 2) 
     { 
      __Error.WinIOError(errorCode, fullPathInternal); 
     } 
    } 
} 
1

ne serait-il terminer aussi vite que ce serait au niveau local? Non, c'est assez lent car il n'y a pas de répertoire de suppression dans windows - Directory.Delete liste tous les fichiers sur le réseau puis les supprime. Identique à Windows Explorer. Selon le nombre de fichiers, cela peut prendre du temps. La suppression de 30.000 fichiers est d'abord listée puis 30.000 suppressions individuelles. Consomme-t-il plus de bande passante que de déplacer des fichiers vers cet emplacement réseau, par exemple,?

Non, ce ne serait pas parce que les fichiers ne sont jamais déplacés. Copier les fichiers est toujours beaucoup plus lent, puis les supprimer.

+0

'rd'-commande dans le shell pour la suppression des répertoires. Je ne sais pas pourquoi l'interface graphique n'utilise pas la même fonctionnalité - à part peut-être pour donner aux utilisateurs une chance de cliquer sur annuler. –

0

Ils enveloppent les appels via l'API Win32.

Découvrez leur fonction grâce à un outil gratuit ici. ILSPY

Ou la prime de remplacement reflector

Questions connexes