Il y a sur ce forum des codeurs professionnels ou de formation programmeur.
A votre avis, lorsque l'on veut travailler sur les données d'un fichier sur disque, il y a plusieurs moyens de le mettre en mémoire.
Voilà 3 façon que je connais mais j'aimerais avoir votre avis sur celle qui est à votre avis la meilleur.
Je ne donne pas de code, c'est plus votre théorie voire votre pratique qui m'intéresse.
1) on charge le fichier en mémoire avec allocatememory et on rempli avec les données du fichier. Pour de petits fichiers c'est je pense pas utile car je pense que ces petits fichiers se trouvent temporairement dans le cache mais pour les gros fichiers, c'est une façon de faire.
2) on utilise les stream qui permettent des opérations de la même manière que sur les fichiers sur le disque.
3) On utilise le mappage des fichiers en mémoire (FilesMapping) avec les API de la série CreateFileMapping_(), l'avantage est la rapidité d'accès aux fichiers et aussi le partage des données entre processus.
Alors, votre avis ?
Questions aux programmeurs professionnels (WIndows)
Tu as oublié de nous dire pour quelle utilisation. Détaille un peu le volume des données (cumulées), la taille moyenne des données transférées, le nombre d'accès. Par exemple, simplement lire un fichier vidéo est différent de faire du montage; une base de données peut nécessiter de petits accès fréquents. De même, en fonction du support (DVD, disque dur, SSD) on peut prévoir des gestions différentes, ou laisser le système faire...
Les fichiers peuvent être sur n'importe quel support mais je pense que globalement le plus souvent sur le DD.
Il s'agit de lire des données en suivant pour les traiter, par bloc de taille qui varie en fonction du contenu mais sans jamais revenir en arrière. C'est des fichiers ico, icl (NE/PE), exe (NE/PE), dll (NE/PE), OCX.
Les fichiers peuvent faire 1 Ko jusqu'à la taille maxi des exe/dll
Ce qui me fait penser que le mappage est peut-être la meilleure solution.
Il s'agit de lire des données en suivant pour les traiter, par bloc de taille qui varie en fonction du contenu mais sans jamais revenir en arrière. C'est des fichiers ico, icl (NE/PE), exe (NE/PE), dll (NE/PE), OCX.
Les fichiers peuvent faire 1 Ko jusqu'à la taille maxi des exe/dll
Ce qui me fait penser que le mappage est peut-être la meilleure solution.
Il manque aussi le contexte d'utilisation mais la où je bosse, je suis presque sûr de lire dans les specs qu'il faudra lire les données en streamings avec allocation(sizeof(exe_dll_ocx_...)) et on manipule le buffer pour le traitement.
De toute façon, la solution n'est souvent validée qu'apres avoir fait différents scénarios de tests + tests de perf.
De toute façon, la solution n'est souvent validée qu'apres avoir fait différents scénarios de tests + tests de perf.
"Qui baise trop bouffe un poil." P. Desproges