Quels sont les inconvénients (le cas échéant) d'utiliser un fichier mappé en mémoire pour lire (fichiers de taille normale) plutôt que d'utiliser la combinaison CreateFile ReadFile?Mappage de la mémoire des fichiers par rapport à CreateFile/ReadFile
Répondre
Vous aurez besoin de code plus complexe pour établir le mappage de fichiers que pour l'ouverture et la lecture. Le mappage de fichiers est destiné à l'accès aléatoire à une section de fichier. Si vous n'en avez pas besoin, ne vous souciez pas du mappage de fichiers.
Si vous avez déjà besoin de porter votre code sur une autre plateforme, vous le ferez beaucoup plus facilement et plus rapidement si vous n'utilisez pas le mappage de fichiers. Avec ReadFile/WriteFile, vous disposez d'une sémantique déterministe de gestion des erreurs.
Lorsque vous utilisez des fichiers mappés en mémoire, les erreurs sont renvoyées en lançant une exception.
En outre, si le fichier mappé en mémoire doit frapper le disque (ou pire, le réseau), la lecture de votre mémoire peut prendre plusieurs secondes (voire quelques minutes). En fonction de votre application, cela peut provoquer des décrochages inattendus. Si vous utilisez ReadFile/WriteFile, vous pouvez utiliser des variantes asynchrones de l'API pour vous permettre de contrôler ce comportement. Vous avez également des performances plus déterministes si vous utilisez ReadFile, en particulier si votre modèle d'E/S est prévisible: les E/S mappées en mémoire sont souvent aléatoires alors que ReadFile est presque toujours en série (puisque ReadFile lit à la position actuelle du fichier et avance la position actuelle du fichier).
Un gros avantage du mappage de fichiers est qu'il n'influence pas le cache système. Si votre application effectue des E/S excessives au moyen de ReadFile, votre cache système va augmenter, consommant de plus en plus de mémoire physique. Si votre système d'exploitation est à 32 bits et que vous avez beaucoup plus de 1 Go de mémoire, vous avez de la chance, puisque sur Windows 32 bits, la taille du cache système est limitée à 1 Go. Dans le cas contraire, le cache système consommera toute la mémoire physique disponible et le gestionnaire de mémoire commencera bientôt à purger les pages des autres processus sur le disque, intensifiant les opérations sur les disques au lieu de les réduire réellement. L'effet est particulièrement visible sur Windows 64 bits, où la taille du cache est limitée uniquement par la mémoire physique disponible. En revanche, le mappage de fichiers n'entraîne pas une surcharge du cache système et, en même temps, ne dégrade pas les performances.
- 1. Refonte des fichiers de mappage Hibernate par NetBeans
- 2. Surveillance des fichiers mappés de la mémoire Windows
- 3. Correctif et correctif par rapport à la version de maintenance par rapport au Service Pack par rapport à
- 4. fonctions d'usine de python par rapport à la classe
- 5. ArrayList par rapport à un tableau d'objets par rapport à la collection de T
- 6. Limitation de la longueur des caractères dans Sql Cell, différence significative par rapport à la mémoire et aux performances?
- 7. Récupérer des données statiques de la base de données par rapport au système de fichiers
- 8. Valeur par rapport à la référence
- 9. L'ordre de chargement des fichiers javascript externes est-il différent dans IE8 par rapport à IE7?
- 10. Appel via la ligne de commande par rapport à JNI
- 11. Comment dll partagé (GAC) chargé en mémoire et utilisé par rapport à la DLL privée
- 12. Utilisation de la propriété DesignMode par rapport à LicenseManager.UsageMode
- 13. Fichiers de données de base et fichiers xcdatamodel par rapport aux fichiers générés
- 14. Executors.newCachedThreadPool() par rapport à Executors.newFixedThreadPool()
- 15. NHibernate mappage des données XML à la base de données
- 16. PHP - définir des constantes par rapport à l'utilisation de config.ini
- 17. La qualité de l'équipe par rapport à un processus spécifique
- 18. Configuration par programme d'endpoints par rapport à web/app.config
- 19. DLL par rapport à l'Assemblée
- 20. Expressions de table communes par rapport à la table temporaire
- 21. Référence automatique des fichiers de classe dans App_Code par rapport à la référence des fichiers de classe en dehors de App_Code
- 22. élément global par rapport à la transmission de paramètres
- 23. Fichiers mappés de mémoire Windows
- 24. Type d'entrée "caché" par rapport à la zone de texte
- 25. Quelle est la performance de F # par rapport à C#?
- 26. Comment changer la taille de la page des rapports de cristal par rapport à 2005?
- 27. Efficacité de la désérialisation par rapport à XmlReader
- 28. Méthode d'extension de performance par rapport à la méthode d'instance
- 29. Programmer des fichiers par lots à copier la nuit
- 30. Codage manuel des vues MVC par rapport à asp: ServerControls