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

Windows XP Discussion :

Mise en cache des répertoires lors d'une lecture fichiers sous XP (question)


Sujet :

Windows XP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 31
    Points : 20
    Points
    20
    Par défaut Mise en cache des répertoires lors d'une lecture fichiers sous XP (question)
    Bonjour à Tou(te)s...

    Je développe en VB 2010 sur PC portable Intel P8700 duo 2,53 Ghz avec 4 Mo de RAM et deux disques 1To 7200rpm

    Suite à la création d'un programme qui gère une arborescence de quelques 28700 répertoires contenant environ 1 million de fichiers images (d'une taille entre 100Ko et 2Mo) j'ai constaté une chose étrange... Enfin, quand on mésestime la logique effective de Microsoft...

    A la première reconstitution de mon index (effectuant la lecture de tous les répertoires pour déterminer ceux qui ont été modifiés et enregistrer les modifications) le temps de l'exécution prend entre 15 et 20mn (je sais c'est long mais il y a du taf... et c'est du VB )

    Curieusement, à la deuxième exécution... cela peut se réduire à quelques minutes (entre 3 et 5)...

    Sachant qu'il n'y a aucune différence de code entre les 2 exécutions... je ne vois qu'une mise en cache des répertoires lus par XP...

    Mythe (de ma part) ou réalité ?
    Est-ce aussi le cas sous 7 8 ou 10 ?

    Et comment pourrais-je obtenir les meilleurs temps à la première exécution ???
    (Je sais, je ne peux pas faire une mise en cache de l'arborescence sans l'avoir parcourue, c'est l'histoire de la poule et de l'oeuf... mais la reconstitution des index ne se fait qu'une fois après l'ajout/suppression de fichiers dans les répertoires... alors les améliorations de temps... c'est un peu tard)

    Merci de vos réponses et de vos suggestions...

  2. #2
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    Décembre 2010
    Messages
    14 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14 939
    Points : 23 253
    Points
    23 253
    Billets dans le blog
    10
    Par défaut
    Bonjour

    Je pense qu'il s'agit de la lecture du fichier journal

    Le système de fichiers NTFS est basé sur une structure différente, appelée table de fichiers maître, contenant des enregistrements sur les fichiers et les répertoires de la partition.

    Le premier enregistrement, appelé descripteur, contient des informations sur la MFT (une copie de celui-ci est stockée dans le second enregistrement).

    Le troisième enregistrement contient le fichier journal, un fichier qui contient toutes les actions effectuées sur la partition.
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par JML19 Voir le message
    Bonjour

    Je pense qu'il s'agit de la lecture du fichier journal
    Bonjour,

    Merci de votre réponse... mais est-il possible que cette lecture triple le temps d'exécution ??? (ou au contraire la diminue des 2/3 ensuite ???)

    J'avoue ne pas trop comprendre cette différence de temps d'exécution qui pénalise sérieusement mon programme.

    J'ai déjà mis en place un algo permettant de ne relire que les répertoires dont la date de modification est supérieure à la date du fichier de liste mais je suis encore à 15mn d'exécution pour une simple modification dans une rubrique... vu que c'est toujours la première fois.

    Cordialement

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Hello,
    Citation Envoyé par Delthi59 Voir le message
    Bonjour,

    Merci de votre réponse... mais est-il possible que cette lecture triple le temps d'exécution ??? (ou au contraire la diminue des 2/3 ensuite ???)
    Tiens, cette histoire me fait penser à ce bon vieux MS-Dos 6.22 dans lequel il fallait activer le système de cache SMARTDRV pour speeder les accès aux fichiers, ou plutôt, aux accès suivants à des fichiers souvent utilisés.
    Parce que la première fois qu'on accédait à un fichier (il y a une première fois à tout ), il n'était pas connu donc c'était plus long que les fois suivantes.

    Est-ce que ça a un rapport avec ton problème ? Je ne sais pas, car je ne sais pas comment les OS modernes gèrent cet aspect des choses à très bas niveau, peut-être que JML19 a raison, avec son histoire de journal (JML19, c'est la 1re fois que j'entends parler de ça, aurais-tu une source ? Merci), en tout cas, je me souviens bien avoir testé des trucs genre démarrer w3.1, lancer Word en chronométrant son démarrage, le fermer, le relancer en re-chronométrant et comparer les résultats : ben y avait pas photo !

    Peut-être poser la question dans le forum VB (même si je n'y crois pas trop) ?

    Sinon, fouiller le web à n'en plus finir...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Hello,


    Tiens, cette histoire me fait penser à ce bon vieux MS-Dos 6.22 dans lequel il fallait activer le système de cache SMARTDRV pour speeder les accès aux fichiers, ou plutôt, aux accès suivants à des fichiers souvent utilisés.
    Parce que la première fois qu'on accédait à un fichier (il y a une première fois à tout ), il n'était pas connu donc c'était plus long que les fois suivantes.
    Bonjour,

    Merci de votre réponse.

    Je ne connais pas DOS 6.22 (trop jeune sans doute ) mais mon problème ressemble un peu à ce que vous décrivez.

    Comme je l'ai marqué dans mon intitulé de question on a l'impression d'une mise en cache de l'arborescence à la première lecture (celle qui prend 15mn) et donc d'un parcours beaucoup plus rapide par la suite... (le problème est que dans mon cas il ne devrait pas y avoir de suite... quand le fichier global est créé il n'y a plus besoin de relancer la création avant d'autres modifications.... et on repart alors sur le même schéma de "première lecture")

    La question devient dans ce cas: comment empêcher cette mise en cache (si c'est elle qui prend du temps) ou, au contraire, la devancer ou la garder pour la fois suivante (si c'est elle qui permet d'en économiser)

    Cordialement,

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par Delthi59 Voir le message
    La question devient dans ce cas: comment empêcher cette mise en cache (si c'est elle qui prend du temps) ou, au contraire, la devancer ou la garder pour la fois suivante (si c'est elle qui permet d'en économiser)
    Citation Envoyé par Jipété Voir le message
    Peut-être poser la question dans le forum VB (même si je n'y crois pas trop) ?

    Sinon, fouiller le web à n'en plus finir...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    Décembre 2010
    Messages
    14 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14 939
    Points : 23 253
    Points
    23 253
    Billets dans le blog
    10
    Par défaut
    Je pense qu'une fois que le fichier journal est constitué sans modification il n'y a plus qu'à le lire.

    Voici une explication du fichier journal (ICI)

    $LogFile

    NTFS implémente la récupération du système de fichiers en utilisant une technique de traitement transactionnel : le journal. Dans cette technique, toutes les sous-opérations sont enregistrées dans un fichier journal avant d'être reportées sur le disque dur, à la manière d'une base de données.

    Les opérations mises en œuvre sur les structures de fichiers, en général, concernent plusieurs secteurs distincts répartis sur le volume. Les modifications ne peuvent toutes être portées sur le disque en une seule fois, mais doivent être effectuées en séquence. Évidemment, les systèmes tiennent compte de l'éventualité d'une panne qui empêche le déroulement complet de la séquence et entraîne une incohérence. Ceci est obtenu en définissant pour chaque opération l'ordre qui donnera le minimum de dégât en cas de panne. En particulier, il est préférable de perdre de l'espace disque plutôt que de risquer d'allouer deux fois le même bloc à deux objets différents. En fait, il est presque toujours possible de rétablir la cohérence et retrouver les blocs non alloués, mais cela peut être coûteux en temps.


    Dans le cas des SGF modernes, le risque est aggravé par le fait que bien souvent les opérations sont effectuées dans des tampons en mémoire, et que l'écriture de ces tampons sur disque est effectuée plus tard, pour gagner en performance et en efficacité (principe de l'écriture paresseuse). Par exemple, une création de fichier donnera souvent lieu dans un avenir proche à une ou plusieurs allocations d'espace disque. Le report des écritures de la table bitmap peut avoir pour conséquence qu'elle ne sera écrite qu'une seule fois lorsque tout sera terminé.


    La structuration d'un volume en NTFS contient un fichier particulier, dit fichier journal, qui va avoir un rôle analogue au fichier journal des systèmes de gestion de bases de données classiques, dans lequel sera mémorisée la séquence des actions effectuées sur le disque dans le but de pouvoir soit les refaire soit les défaire après une panne. Cette utilisation fait appel à la notion de transaction, qui signifie, entre autre, que l'on garantit que toutes les opérations élémentaires de la transaction sont effectuées, même en cas de panne, ou que aucune n'est faite. Expliquons brièvement le déroulement des opérations lors de la création d'un fichier avec allocation d'espace. Les opérations sont les suivantes:

    1.Initialisation d'une transaction.
    2.Création d'un descripteur du fichier dans la MFT.
    3.Création de l'entrée dans le répertoire parent,
    4.Mise à l'état non libre des bits correspondants aux clusters alloués, dans la bitmap,
    5.Clôture de la transaction.

    Les opérations 2, 3 et 4 sont faites dans des tampons en mémoire, et lors de la clôture de la transaction, il est probable que ces tampons n'ont pas encore été écrits sur disque. Chacune de ces opérations donne lieu à un enregistrement dans le fichier journal qui décrit comment "refaire" et comment "défaire" l'opération correspondante. En fait ces enregistrements sont mis dans des tampons en mémoire, en vue d'une écriture ultérieure, comme pour tout fichier. Cependant le gestionnaire de ces tampons fera en sorte que les tampons du fichier journal soient écrits sur disque avant l'écriture des autres tampons. De plus, périodiquement, l'état des transactions ainsi que la liste des tampons en mémoire non encore écrits sur disque sont enregistrés dans le fichier journal. En cas de panne une analyse du fichier journal permet de savoir les transactions clôturées dont les actions n'ont pas été portées physiquement sur disque et qui doivent donc être refaites, ou les transactions non clôturées dont les actions portées physiquement sur disque doivent être défaites.
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  8. #8
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    système de journal, multiples système de cache aussi, tant au niveau de l'applicatif qu'au niveau des données manipulées.

    Une des améliorations de Vista, mais surtout W7 est la gestion du maintient en mémoire. Pour grandement résumer le principe, les données chargées en mémoire, même lorsqu'elles ne sont plus utiles ne sont pas forcément déchargées de la mémoire.

    Ainsi, si ton logiciel est relancé quelques instants plus tard, (déjà le concernant, si le code exécutable est déjà en mémoire il n'y a pas besoin de l'y recharger), s'il réutilise les mêmes données qu'avant, si celles-ci se trouvent encore en mémoire il suffit donc de les rappelées, inutiles de les recharger. C'est autant de temps de gagner.
    Et Il existe plusieurs caches de fonctionnement similaire y compris sur les lectures disques.

    Les limites à ce système sont le besoin de mémoire et le temps.
    Il est évident que les données inutiles restées en mémoire seront écrasées si jamais un autre processus à besoin d'utiliser cette mémoire.
    De plus Windows ne conserve pas éternellement ces données-là. Elles sont effacées au bout de quelques minutes si elles n'ont pas été réutilisées.

    Donc la première exécution a son temps normal, les exécutions suivantes immédiates seront plus rapides, mais au bout d'un temps variable le gain est perdu, on revient à une "première exécution"
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    système de journal, multiples système de cache aussi, tant au niveau de l'applicatif qu'au niveau des données manipulées.

    Une des améliorations de Vista, mais surtout W7 est la gestion du maintient en mémoire. Pour grandement résumer le principe, les données chargées en mémoire, même lorsqu'elles ne sont plus utiles ne sont pas forcément déchargées de la mémoire.
    Bonjour,

    Merci pour votre réponse, cela correspond à ce que j'ai pu remarquer... mais je suis sous XP SP3 Ce système prend-t-il en compte lui aussi cette gestion de mémoire ?

    Et ma question reste la même... peut on faire quelque chose pour avoir des temps de traitement proche de ceux des "optimisés" plutôt que ceux du "premier" accès ?

    Cordialement

  10. #10
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Pourquoi ne pas gérer vous même votre cache en interne de l'application ?
    Et laisser un thread tourner pour le mettre à jour ?

    Cela vous donne un premier effort lors du premier lancement de l'application et après c'est indolore, même pour les lancements suivants.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ignorer des caractères lors d'une lecture fichier
    Par Inaky dans le forum Langage
    Réponses: 9
    Dernier message: 06/11/2011, 15h25
  2. Réponses: 2
    Dernier message: 12/08/2011, 14h07
  3. Réponses: 0
    Dernier message: 18/04/2011, 17h02
  4. Réponses: 0
    Dernier message: 18/04/2011, 17h02
  5. [VB.NET]Comment afficher 1 progressbar lors d'une lecture fichier ?
    Par evlp2004@hotmail.com dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/05/2006, 09h00

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