De nombreux éditeurs hexadécimaux, tels que Hex Workshop, peuvent même lire des fichiers de grande taille tout en conservant une empreinte mémoire relativement faible, tout en conservant un défilement fluide. Je cherche le meilleur moyen d'y parvenir, et j'ai donc plusieurs questions connexes.
Devrais-je simplement utiliser FileStream?
- La mise en mémoire tampon est-elle basée sur l'emplacement de recherche actuel? (Sera-t-il généralement un défaut de page lors du défilement arrière?)
- Si je crée un wrapper pour FileStream qui n'utilise que Seek en interne, est-ce que je vais nuire à la capacité de FileStream à tamponner correctement? (Est-ce que je peux me fier à l'algorithme Buffering ou au planificateur de disque pour maintenir les performances?)
Serait-il préférable d'utiliser des E/S mappées en mémoire? (Je ne m'attends vraiment qu'à des fichiers d'une capacité pouvant atteindre 100 Mo.)
- Les erreurs de recherche de pages/saut/défilement rapide créent-elles des problèmes de performance?
Finalement, les données doivent être affichées. Devrais-je rendre le fichier entier sous forme de bitmap et invalider des parties de l'image lors des changements (en laissant le contrôle de défilement effectuer sa propre recherche sur l'image) ou devrais-je générer la zone d'affichage en cours?
Donc, en bref, est-ce que je numérise les données, l'image générée, ou les deux, ou puis-je les générer/générer au besoin? Quelles sont les bibliothèques/objets API (WPF/.Net) les mieux adaptés à cette tâche?Quelle est la meilleure façon d'afficher des fichiers volumineux sans utiliser de grandes quantités de mémoire?
Répondre
Vous semblez déjà avoir la réponse.
La solution générale pour cela est d'utiliser Memory Mapped files et laisser le système d'exploitation avec la mise en cache et la recherche.
Essayez d'abord la solution la plus simple et la plus évidente. Si cela ne fonctionne pas à votre satisfaction, optimisez les goulots d'étranglement. Premature optimizations is the root of all evil.
100Mo n'est vraiment pas très grand. Donc, dans la mémoire fonctionnerait probablement sur de nouvelles machines.
Mais vous ne voudriez pas que votre solution n'évoluera pas au fil du temps. La minute où vous supposez que la limite est de 100 Mo, quelqu'un l'essayera avec 200 Mo. Donc, je vous recommande de prendre le "chercher" itinéraire - c'est la façon commune de le faire.
- 1. .NET + Copier de grandes quantités d'astuces de mémoire
- 2. Meilleure façon de charger de grandes quantités de données dans DataGrid
- 3. Quelle est la meilleure façon de faire une recherche dans un fichier volumineux?
- 4. Quelle est la meilleure façon de gunzip fichiers avec Perl?
- 5. Quelle est la meilleure façon de commencer à utiliser Mylyn?
- 6. Supprimer de grandes quantités de données dans SQL Server 2005
- 7. Quelle est la meilleure façon de créer des déploiements ClickOnce
- 8. Quelle est la meilleure façon d'examiner les fichiers access.log d'apache?
- 9. iPhone SDK: enregistrer de grandes quantités de texte
- 10. Quelle est la meilleure façon de vider un répertoire?
- 11. Quelle est la meilleure façon de stocker des fichiers multimédia sur une base de données?
- 12. Quelle est la meilleure façon de dire à un framework quelle base de données utiliser?
- 13. Quelle est la meilleure façon de stocker et d'instancier la liste des classes en C++ sans utiliser STL?
- 14. Quelle est la meilleure façon d'utiliser C# avec mysql sans utiliser odbc
- 15. Quelle est la meilleure façon de générer des fichiers spécifiques à l'environnement pour un projet Rails?
- 16. Quelle est la meilleure façon de tester les services WCF?
- 17. Quelle est la meilleure façon de mettre en cache des fichiers en php?
- 18. Quelle est la meilleure façon d'automatiser le remplacement de texte?
- 19. Quelle est la meilleure façon de faire ce programme Java?
- 20. Quelle est la meilleure façon de diffuser de l'audio sur un site Web?
- 21. Quelle est la meilleure approche pour appliquer des styles à des quantités massives d'objets?
- 22. Quelle est la meilleure façon d'importer/lire des données à partir de fichiers pdf?
- 23. radiomessagerie de grandes quantités de données dans un Gridview
- 24. Quelle est la meilleure façon de dupliquer fork() dans Windows?
- 25. quelle est la meilleure façon de marquer un texte?
- 26. jQuery et d'ajouter de grandes quantités de HTML
- 27. Quelle est la meilleure façon de différencier Crystal Reports?
- 28. Quelle est la meilleure façon de faire l'échange de données d'application dans Delphi sans sockets?
- 29. Quelle est la meilleure façon de vérifier la capacité du système de fichiers en utilisant .Net?
- 30. Quelle est la meilleure façon de trouver l'inverse de datetime.isocalendar()?