ayd*_*man 0 c# memory memory-management
假设我有一个1 GB的文本文件,我想阅读它.如果我尝试打开此文件,我会收到"内存溢出"错误.我知道,通常的答案是"使用StreamReader.ReadLine()方法".但我想知道这是如何工作的.如果使用ReadLine方法的程序想要获取一行,则必须迟早打开整个文本文件.据我所知,文件存储在磁盘上,它们可以在"全有或全无"的原则下在内存中打开.如果我的1 GB文本文件中只有一行通过使用ReadLine()方法一次存储在内存中,这意味着我们必须在读取1 GB文本文件的每一行时使用磁盘IO.这对于表演来说这不是一件可怕的事情吗?
我很困惑,我想要一些有关这方面的细节.
这意味着我的1 GB文本文件的每一行都必须有磁盘IO
不,您的ReadLine()调用和物理磁盘之间有很多层,旨在解决这个问题.最重要的:
文件系统缓存是迄今为止最重要的缓存.也是一个棘手的问题因为它阻止你准确地分析你的程序.当您一遍又一遍地运行测试时,您的程序实际上永远不会从磁盘读取,只读取缓存.这使得它变得不切实际.虽然1 GB文件可能不太适合,但取决于您在机器中有多少RAM.