Mon problème est que l'application prend trop de temps à charger des milliers de fichiers. Oui, je sais que ça va prendre du temps, mais je voudrais que ce soit plus rapide. Ce que je veux dire par "charger" est d'ouvrir le fichier pour obtenir son descripteur et ensuite lire les 100 premiers octets ou plus. Donc, ma stratégie principale a été de créer un deuxième thread qui ouvrira et fermera (sans lire aucun contenu) tous les fichiers. Cela semble aider parce que le thread avance devant le thread principal et je suppose que le système d'exploitation cache ces descripteurs de fichiers à l'avance, de sorte que lorsque mon thread principal les ouvre, il s'ouvre rapidement. Cela a effectivement aidé car le thread peut commencer à mettre en cache ces descripteurs de fichier pendant que mon thread principal analyse les données lues depuis ces fichiers.Comment ouvrir et lire des milliers de fichiers très rapidement
Donc, ma vraie question est ... que puis-je faire d'autre pour accélérer les choses? Quelles approches sont là? Quelqu'un at-il eu du succès en faisant cela?
J'ai entendu parler d'appels de préchargement d'OS mais c'était pour les pages de mémoire virtuelle. Y at-il un moyen de dire à l'OS, hé je vais avoir besoin de tous ces fichiers très bientôt - je suggère que vous commencez à les rassembler pour moi à l'avance. Mon fil de lookahead est assez grossier.
Y a-t-il des techniques de disque de bas niveau que je pourrais utiliser? Y a-t-il un modèle d'accès aux fichiers qui pourrait aider? À l'heure actuelle, les fichiers chargés proviennent tous du même dossier. Je suppose qu'il n'y a aucun moyen de déterminer où exactement sur le disque ils mentent et quel ordre d'ouverture du fichier serait le plus rapide pour le disque. Je devine également que le disque a un matériel dur pour rendre ceci aussi efficace comme possible aussi.
Mon application est principalement pour windows, mais des suggestions unix aideraient aussi.
Je programme en C++ si cela fait une différence.
Merci, -julian