IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Question basique sur une boucle..


Sujet :

ASP.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2023
    Messages : 4
    Par défaut Question basique sur une boucle..
    Bonjour à tous,

    Je dois me remettre à asp.net après des années sans y toucher, mais ma question est plutôt générale sur un problème fondamental que je me pose...

    Je dois faire une boucle, disons par exemple de 1 à 10000, dans laquelle j'ai déplace des répertoires (à chaque tour on bouge un répertoire qui contient 4 sous-répertoires qui contiennent potentiellement des centaines de fichiers pas trop lourds).

    Je devrais m'en sortir d'un point de vue code avec, sauf erreur, directory.move, mais je me pose une question sur le fonctionnement car je ne voudrais pas tout cracher...

    Le fait de bouger tous ces dossiers et fichiers est-il une simple réécriture de chemin d'accès, ce qui doit aller vite, ou cela prend-il du temps au serveur ?

    Asp.net attend-il que le move soit exécuté pour poursuivre la boucle ou lance-t-il le move puis passe-t-il au au tour suivant tout de suite etc... auquel cas à un moment donné il va y avoir un exception car on va passer vite de 1 à 10000 mais en ayant demandé tellement d'opérations que ça ne va pas passer.

    J'espère avoir été clair !

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    move est en effet presque instantané car ca change juste les infos sur le parent, les données restent les mêmes sur le disque dur

    avec une boucle normale chaque dossier sera déplacé chacun son tour
    avec une boucle parallèle tu peux en faire n par n (n étant au choix), sur un ssd en traiter plusieurs à la fois peut gagner du temps (bien que sur du move la différence n'est peut être pas flagrante, aucune idée)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2023
    Messages : 4
    Par défaut
    Merci Pol63 pour cette réponse. Je vais donc pouvoir avancer.

    Par souci de comprendre le fonctionnement j'aimerais savoir comment ça marche si ce n'était pas immédiat avec move.

    Si par exemple je programme un zip à chaque boucle, qui va prendre nécessairement du temps, comment faire les choses proprement pour ne rien planter, c'est à dire bien valider que le zip est terminé avant d'enchainer sur le tour suivant ? Si c'est le cas il doit y avoir une histoire de timeout à régler si ça dure trop longtemps ?

    Merci d'avance pour vos conseils et bonne journée

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Deux solutions :
    - Soit du reste en full synchrone, et aucun souci si ce n'est que les ressources du PC seront probablement sous-exploitées (pendant les attentes IO ton programme attend bêtement, et inversement pendant les attentes CPU le disque attend bêtement)
    - Soit faire de l'asynchrone. Et là, effectivement c'est pas plus compliqué si t'as 5 ou 10 opérations en //. Par contre si t'en lances 10000 tu risques d'engorger les ressources. Dans ce cas il faut il faut passer par un pool de threads et/ou une notion de thread producteur/consommateur.

    https://learn.microsoft.com/fr-fr/do...ed-thread-pool
    https://learn.microsoft.com/fr-fr/do...taflow-pattern

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2023
    Messages : 4
    Par défaut
    Merci pour tes explications très claires.

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2023
    Messages : 4
    Par défaut
    Bonjour !

    Je suis face à un problème...

    J'ai réussi à faire ma routine avec directory.move mais je suis confronté à une difficulté : l'accès au répertoire est refusé, de manière aléatoire.

    On retrouve cette problématique sur plein de forums à propos de directory.move.

    Il s'avère qu'une tâche tournerait et bloquerait le répertoire, mais ce n'est pas systématique. Mais au final je n'ai pas trouvé une seule explication pour résoudre le problème.

    Je viens de tenter à nouveau et certains répertoires passent, puis d'autres ont bloqué.
    J'ai vu avec mon hébergeur qui me dit que c'est mon application elle-même qui verrouille l'accès.
    Or on parle de dossiers qui n'ont pas été utilisé depuis 10ans, et je n'ai aucun tâche qui tourne sur le site, qui n'a d'ailleurs pratiquement plus de trafic.

    Il a vu plein de dossiers verrouillés, puis en relançant le service web tout a été libéré.

    Puis un premier dossier totalement inactif est apparu comme verrouillé et si j'ai bien compris c'est w3wp.exe qui le bloquerait.

    Est-ce que cela vous dit quelque chose ? Et surtout avez-vous une idée pour me permettre d'utiliser directory.move ?

    Merci d'avance pour votre aide !

  7. #7
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Une piste classique, c'est le moteur d'indexation de Windows : dès qu'un dossier bouge, il scanne son contenu pour réindexer au besoin.
    Ceci peut provoquer des blocages, et si on retente quelques minutes plus tard il n'y a plus de blocage.

    Ceci arrive notamment si tu déjà bougé des choses à l'intérieur du dossier que tu tentes de déplacer.

    Après à froid j'ai pas trop d'autres idées.

    Un extrait de code pourrait nous aider à diagnostiquer de façon plus précise si ça vient vraiment du programme.

Discussions similaires

  1. [XL-2013] Question basique sur l'étendue masquée d'une boucle
    Par Polygos dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/10/2017, 10h52
  2. [XL-2016] Question sur une boucle
    Par kingsman_10 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/03/2017, 10h56
  3. [PPT-2010] Questions sur une boucle
    Par droopy1702 dans le forum Powerpoint
    Réponses: 2
    Dernier message: 03/02/2014, 10h08
  4. [SHELL]Question délicate sur une boucle
    Par magellan94 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 31/12/2011, 21h03
  5. question sur une boucle et un break
    Par isidore dans le forum C
    Réponses: 10
    Dernier message: 22/11/2006, 20h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo