2010-10-06 10 views
0

Lorsque j'exécute le code suivant pour supprimer et déplacer un fichier mon processus de travail est suspendu:Pourquoi l'appel de File.Delete() et File.Move() dans ASP.NET bloque-t-il mon processus de travail?

File.Delete(FullSourceFilePath); 
File.Move(FullTempFilePath, FullSourceFilePath); 
// update db 
Data.AdminUpdateFileSizeandBitrate(FileId, SizeInbytes, Bitrate); 
Response.Redirect("?m=File replaced!"); 

Le dossier FullSourceFilePath a plus de 15000 fichiers qu'il contient.

Le code ci-dessus provoque le blocage du site (uniquement ce site) si le fichier à déplacer est supérieur à 5 Mo environ. Lorsque ce problème se pose, mon processus de travail commence à consommer de la mémoire et progressivement mon serveur est mis à genoux.

La seule solution de récupération consiste à émettre la commande IISRESET /RESTART.

Mon environnement est:

IIS6 fonctionnant sous Windows 2003 x86 SP2
site Web écrit en utilisant ASP.NET 4.0 et C#

Répondre

0

A une supposition, le problème ici est probablement le grand nombre de fichiers dans le dossier vers lequel vous déplacez le fichier.

Le processus de travail se bloque-t-il uniquement sur le File.Move()?

Essayez de faire:

File.Delete(FullSourceFilePath); 
File.Copy(FullTempFilePath, FullSourceFilePath); 

Autres choses à essayer sont d'effectuer les mêmes actions à partir de la ligne de commande et voir si cela provoque le même problème à se poser.

Si c'est le cas, votre système de fichiers peut être très fragmenté et le disque est en train de se débattre. Windows ne traite pas non plus un grand nombre de fichiers si les fichiers peuvent être catégorisés de quelque manière que ce soit (par exemple par plage d'ID ou plage de dates), puis les décomposer en sous-dossiers.

Vous pouvez également exécuter DebugDiag et capturer un minidump pour voir où le goulot d'étranglement se produit.

Tess Ferrandez' blogTess Ferrandez' blog a d'excellents articles sur la façon d'utiliser cet outil pour déterminer les causes de l'utilisation du processus de travail de mémoire élevée, se bloque et se bloque.

.NET Debugging Demos - Information and setup instructions

+0

grâce, il suffit d'ajouter un peu plus d'informations. même opération fonctionne très bien avec l'asp classique – nLL

+0

@nLL - probablement le temps de déterrer les outils de débogage pour savoir ce qui se passe. – Kev