2016-03-31 2 views
1

Je travaille avec un fichier volumineux (8 Go) via un fichier mappé en mémoire (C# MemoryMappedFile). Je voudrais pouvoir mettre le contenu dans une grille WPF (grille de données par exemple), mais j'ai des problèmes car chaque approche qui semble fonctionner doit charger le fichier en mémoire, ce qui détruit le point du fichier mappé en mémoire . Je sais qu'une grille de données wpf peut accéder uniquement aux données nécessaires, mais comment la lier au fichier mappé en mémoire pour que je puisse demander uniquement les octets qui sont visualisés et ne pas avoir à tout mettre en mémoire .Fichier mappé en mémoire dans une grille WPF

J'espérais un moyen facile comme le fichier datagrid.itemsource = mais cela ne ressemble pas à la casse.

Mon objectif final est de charger ce fichier volumineux et d'afficher les octets du fichier, comme un éditeur hexadécimal. Quelqu'un a un exemple en utilisant un fichier mappé en mémoire ou quelque chose ne lit que les octets du fichier que l'utilisateur est en train de visualiser?

+0

Pourquoi voulez-vous utiliser DataGrid? Que vas-tu afficher dans les colonnes? – Evk

+0

Les colonnes seront dynamiques pour créer des lignes d'octets. Similaire à la plupart des éditeurs hexadécimaux – user6141665

Répondre

0

Je vais essayer de vous donner un aperçu de haut niveau de la façon dont cela peut être fait. Vous aurez besoin à la fois de la virtualisation de l'interface utilisateur et de la virtualisation des données. La virtualisation d'interface utilisateur que vous avez gratuitement dans DataGrid par défaut (VirtualizingStackPanel), pour la virtualisation de données, vous devez utiliser des solutions personnalisées (exemple: https://alphachitech.wordpress.com/2015/01/31/virtualizing-observable-collection/). Chaque élément représentera 1 Mo de données brutes, donc au total, vous en aurez environ 8000 dans votre grille. Au départ, aucun de ces éléments ne contient de données. Les données sont uniquement lues à partir de votre fichier mappé en mémoire lorsque l'utilisateur fait défiler la partie du fichier (voir la section virtualisation des données ci-dessus). Cela permettra à l'utilisateur de faire défiler le fichier entier de 8 Go comme s'il était chargé en mémoire, tandis que des blocs de 1 Mo seront chargés et déchargés pendant qu'il défile.

+0

C'était exactement ce dont j'avais besoin. J'ai suivi leur exemple et je suis capable d'afficher de gros fichiers avec un impact minimal (10-20MB) – user6141665

+0

C'était exactement ce dont j'avais besoin. J'ai suivi leur exemple et je suis capable d'afficher des fichiers volumineux avec un impact minimal (10-20 Mo) – user6141665