L'expansion sur la réponse CasperOne
mis simplement il n'y a aucun moyen de mettre un fichier fiable de 100 Go en mémoire à un moment donné. Sur une machine 32 bits, il n'y a tout simplement pas assez d'espace d'adressage. Dans une machine 64 bits, il y a suffisamment d'espace d'adressage, mais pendant le temps nécessaire pour obtenir le fichier en mémoire, votre utilisateur aura tué votre processus par frustration.
L'astuce consiste à traiter le fichier de façon incrémentielle. La classe System.IO.Stream() de base est conçue pour traiter un flux variable (et éventuellement infini) en quantités distinctes. Il a plusieurs méthodes de lecture qui ne progresseront que dans un flux d'un nombre spécifique d'octets. Vous devrez utiliser ces méthodes pour diviser le flux.
Je ne peux pas donner plus d'informations car votre scénario n'est pas assez spécifique. Pouvez-vous nous donner plus de détails ou vos délimiteurs d'enregistrements ou quelques exemples de lignes du fichier?
Mise à jour
Si elles sont des enregistrements de longueur fixe alors System.IO.Stream fonctionnera très bien. Vous pouvez même utiliser File.Open() pour accéder à l'objet Stream sous-jacent. Stream.Read a une surcharge qui demande le nombre d'octets à lire dans le fichier. Comme ce sont des enregistrements de longueur fixe, cela devrait fonctionner pour votre scénario.
Tant que vous n'appelez pas ReadAllText() et que vous utilisez à la place les méthodes Stream.Read() qui prennent des tableaux d'octets explicites, la mémoire ne sera pas un problème. La classe Stream sous-jacente veillera à ne pas mettre le fichier entier en mémoire (c'est bien sûr, sauf si vous le lui demandez :)).
Exactement ce que Casper a dit, sont aussi qu'ils enregistrements de longueur fixe ou de longueur variable et delimted par de nouvelles lignes? –