2009-10-09 8 views
1

J'ai un tas de fichiers qui sont lus par un autre groupe de threads. Certaines parties des fichiers sont lues plusieurs fois en utilisant plusieurs fichiers ouverts. J'aimerais avoir une sorte de flux de fichier de mise en cache.Caching stream dans C#

Si une partie du fichier était déjà lue, toutes les lectures suivantes proviendraient du cache, sinon la partie du fichier serait lue et le contenu ajouté au cache.

Les fichiers ne changent pas, il n'est donc pas nécessaire d'invalider le cache.

Est-ce que quelqu'un sait qu'une telle classe est disponible quelque part ou un mécanisme similaire qui pourrait aider avec un tel problème?

+0

Il y a un mécanisme intégré de mise en cache pour le fichier IO, mais il ne met en cache une petite partie du fichier. Si votre logiciel suit le principe de localité, il n'y a pas de problème. Sinon, qu'est-ce que vous essayez de faire? Voulez-vous éventuellement avoir le fichier entier en mémoire? Voulez-vous que ce soit retardé ou est-ce que vous pouvez le charger dès le départ? –

Répondre

1

Si la taille du fichier est petite, vous pouvez utiliser l'objet MemoryStream partagé pour mettre en cache les flux de fichier. Mais je ne suis pas sûr de mettre en cache la partie d'un fichier et d'identifier la partie d'un fichier à partir du cache.

Vous pouvez mettre en cache l'intégralité du fichier dans un flux de mémoire et l'utiliser en cas de besoin. Et vous pouvez l'identifier en utilisant le nom de fichier comme une clé. Pour cela, vous devez gérer une liste ou un type de structure de dictionnaire pour stocker les paires nom de fichier (clé) - binaire (valeur). Ces liens ci-dessous ont abordé les mêmes sujets. un coup d'oeil

espérons que cette aide

Vive

Ramesh Vel

+1

Les fichiers sont plutôt gros et j'aimerais les mettre partiellement en cache. – bh213