我需要使用 C#.Net 访问一些文本文件(记录)。但问题是那些文件大于 1GB。 (最小大小为 1 GB)
我需要做什么? 我需要关注哪些因素?
谁能给我一个摆脱这种情况的想法。
编辑:
感谢您的快速回复。是的,它们是固定长度的记录。这些文本文件来自本地公司。 (有上个月交易记录)
是否可以像普通文本文件一样访问这些文件(使用普通文件流)。
和
内存管理怎么样????
最佳答案
扩展 CasperOne 的答案
简单地说,没有办法一次可靠地将 100GB 的文件放入内存。在 32 位机器上根本就没有足够的寻址空间。在 64 位机器中,有足够的寻址空间,但在实际将文件放入内存所需的时间里,您的用户会因为沮丧而终止您的进程。
诀窍是增量处理文件。基本 System.IO.Stream() 类旨在处理不同数量的可变(并且可能是无限的)流。它有几个 Read 方法,这些方法只会在流中前进特定数量的字节。您将需要使用这些方法来划分流。
我无法提供更多信息,因为您的场景不够具体。您能否提供更多详细信息或您的记录分隔符或文件中的一些示例行?
更新
如果它们是固定长度的记录,那么 System.IO.Stream 就可以正常工作。您甚至可以使用 File.Open() 来访问底层 Stream 对象。 Stream.Read 有一个重载请求要从文件中读取的字节数。由于它们是固定长度的记录,因此这应该适用于您的场景。
只要您不调用 ReadAllText() 而是使用采用显式字节数组的 Stream.Read() 方法,内存就不是问题。底层 Stream 类会注意不要将整个文件放入内存(当然,除非您要求它:))。
关于c# - 使用 C# 的更大文件流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/447299/