2012-07-26 7 views
0

Je fabrique un générateur de combinaisons. Pour de petites quantités d'éléments, ce n'est pas un problème pour l'ordinateur que les données soient stockées dans la mémoire RAM à la place dans un fichier. Mais lorsque le nombre d'éléments augmente, mon ordinateur manque de mémoire (l'exception OutOfMemoryException se produit). Les combinaisons sont des nombres stockés dans des listes, qui sont actuellement stockés dans une autre liste.Stockage des données dans des fichiers personnalisés

Mais ce n'est que la première étape - le générateur fonctionne correctement. Je veux que les données soient stockées dans un fichier, d'où un programme différent pourra extraire les combinaisons dont il a besoin. La plupart du temps, je dois stocker les données dans un fichier séparé, car le générateur devra être capable de créer des combinaisons de plus en plus grandes à l'avenir. L'ordinateur devra lire certaines parties des données, sans les faire toutes dans la mémoire temporaire, car c'est impossible.

Je ne souhaite pas transformer les données en texte et, le cas échéant, convertir le texte en données. Je pense que cela va ralentir les choses à cause des conversions. Je veux que les listes soient stockées dans un fichier personnalisé, à partir duquel le programme peut directement extraire les données sans aucune conversion.

+1

Vous devez stocker les données au format binaire ou utiliser une base de données. –

+1

Il s'agit d'une bonne information d'arrière-plan, mais il ne semble y avoir aucune question.En outre, y a-t-il un problème spécifique que vous rencontrez avec le code? Si oui, veuillez poster ce que vous avez essayé jusqu'ici. – JYelton

Répondre

2

Il y a une bonne écriture sur la façon de sérialiser une liste <> dans un fichier à http://www.switchonthecode.com/tutorials/csharp-tutorial-serialize-objects-to-a-file

+0

Ce tutoriel explique comment transformer les données en un fichier texte et c'est ce que je ne veux pas faire. Un ordinateur créera le fichier et un ordinateur le lira, pas un utilisateur humain. Je veux stocker les données dans un fichier non texte, d'où le programme peut lire les données sans aucune conversion. Mais la sérialisation permet-elle de stocker les données dans un fichier non-texte? Cela n'a pas été mentionné dans le tutoriel. – AlexSavAlexandrov

+0

J'ai juste essayé le code. Il a quelques bugs mineurs, mais ils sont facilement résolus. Le fichier de données (malgré le choix malheureux des noms) n'est certainement pas un fichier texte. –

+0

Encore, je vais devoir comprendre comment le programme a lu le fichier. Ceci n'est pas expliqué dans le tutoriel aussi. Je vais devoir trouver un moyen pour que le programme lise certaines parties du fichier, sans lire les données WHOLE (sinon, la mémoire des ordinateurs sera remplie à la limite bien avant la fin de la lecture du fichier). – AlexSavAlexandrov

3

Il y a une tonne d'options disponibles dont je vais décrire brièvement quelques-unes.

  • Utilisez une base de données. De votre description, cela ne ressemble pas à un bon choix, mais il sera le plus flexible pour tous les clients relativité rapide et efficace de stockage. Utilisez l'un des sérialiseurs .net de votre description. Le sérialiseur binaire sera votre meilleur choix. Les sérlizers offrent beaucoup d'avantages relativité rapide et cuit en .net avec support intégré et très facile à utiliser.

  • Utilisez un format binaire personnalisé. Ce sera l'option la plus rapide surtout si vous le combinez avec un fichier mappé en mémoire. Cependant, les formats binaires peuvent être difficiles à utiliser et faciles à bousiller.

3

Si vous voulez vraiment stocker vos données dans un fichier, vous pouvez utiliser la classe BinaryFormatter. C'est probablement le moyen le plus efficace de sérialiser les objets de données en flux binaire.

Mais je ne vous recommanderais pas de générer des combinaisons de cette manière si seulement vous n'avez pas besoin de les stocker en même temps et de les charger longtemps après cela. Il est préférable d'utiliser des combinaisons paresseuses de génération. Un par un, complètement généré sans avoir besoin de "générer de plus grandes combinaisons dans le futur" (générer les "plus grandes" combinaisons nécessaires une par une - vous pourriez changer un peu votre algorithme de génération - il y a déjà beaucoup de réponses)

+0

Je demande simplement comment stocker des données à tous. C'est une question différente comment vais-je l'utiliser dans cette situation. – AlexSavAlexandrov

Questions connexes