Stream - limitation du système de fichiers
Résolu/Fermé
A voir également:
- Stream dispose c#
- Popcorn stream - Télécharger - TV & Vidéo
- Ace stream - Télécharger - Lecture
- Papa du stream avis ✓ - Forum Réseaux sociaux
- Netu stream - Forum Téléchargement
- Votre appareil ne dispose pas des correctifs de qualité - Guide
1 réponse
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
6 nov. 2013 à 14:21
6 nov. 2013 à 14:21
Salut,
si ton apli utilise le .NET 4, il y a les MemoryMappedFile avec ses streams créés par MemoryMappedFile.CreateViewStream.
Sinon, pour du .NET < 4, j'espère que tu utilises des buffers codés manuellement pour ton appli, car laisser l'OS gérer le buffering de très gros fichiers ça passe pas.
Utiliser un BufferedStream améliore grandement les performances en lisant le fichier bloc par bloc. Ce code lit le fichier ligne par ligne mieux qu'avec un simple FileStream:
Selon ce que je comprends, ton appli est censée trouver les doublons, ça dépend quels genre de doublons mais tu peux utiliser l'algorithme de Rabin-Karp pour ce genre de tâches.
si ton apli utilise le .NET 4, il y a les MemoryMappedFile avec ses streams créés par MemoryMappedFile.CreateViewStream.
Sinon, pour du .NET < 4, j'espère que tu utilises des buffers codés manuellement pour ton appli, car laisser l'OS gérer le buffering de très gros fichiers ça passe pas.
Utiliser un BufferedStream améliore grandement les performances en lisant le fichier bloc par bloc. Ce code lit le fichier ligne par ligne mieux qu'avec un simple FileStream:
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))Les BufferedStream peuvent prendre un 2e argument en constructeur: la taille du buffer, de 4Kio (4096 octets) par défaut; il se peut qu'augmenter ou diminuer cette valeur peut améliorer (ou dégrader) la performance selon le type de support de stockage.
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
string line;
while ((line = sr.ReadLine()) != null)
{
// Le traitement.
}
}
Selon ce que je comprends, ton appli est censée trouver les doublons, ça dépend quels genre de doublons mais tu peux utiliser l'algorithme de Rabin-Karp pour ce genre de tâches.
6 nov. 2013 à 14:59
J'ai donc fais ce code :
et une fois de plus l'exception apparait (au caractère 4094 ... d'après ce que tu me dis ce n'est peu être pas un hasard ;] )
J'ai donc géré l'exception de cette manière :
et il semblerai que là ca passe. J'ai lancé le test, mais bon il faut que j'arrive à environ 13/14 go de données traitées pour qu'il apparaisse. Je te redirai ;)
naga
7 nov. 2013 à 08:22
Donc non ca ne passait pas, le problème venait bien du buffer ! Je suis toujours en train de tester, mais il semble que cette fois ca fonction. Voilà donc mon code :
merci pour ton aide, ca m'a beaucoup "éclairé".
naga