繁体   English   中英

文件打开内存C#

[英]File open memory c#

使用流阅读器在C#中打开文件时,文件将保留在内存中,直到关闭为止。 例如,如果程序使用streamreader打开了大小为6MB的文件,并在文件末尾附加了一行。 程序将整个6 MB的内容保存在其内存中,直到关闭文件。 OR是.Net代码在内部返回的文件指针,并且该行附加在末尾。 因此程序不会占用6MB的内存

流的重点在于您不必在内存中保留整个对象。 您可以根据需要逐条阅读。

如果要追加到文件,则应使用File.AppendText ,这将创建一个StreamWriter追加到文件的末尾。

这是一个例子:

 string path = @"c:\temp\MyTest.txt";

 // This text is always added, making the file longer over time
 // if it is not deleted.
 using (StreamWriter sw = File.AppendText(path)) 
 {
     sw.WriteLine("This");
     sw.WriteLine("is Extra");
     sw.WriteLine("Text");
 } 

同样,整个文件将不会存储在内存中。

文档: http : //msdn.microsoft.com/zh-cn/library/system.io.file.appendtext.aspx

.NET FileStream将缓冲少量数据(您可以使用某些构造函数设置此数量)。

Windows OS将对文件进行更重要的缓存,如果您有足够的RAM,则可能是整个文件。

StreamReader 不会将6 MB的文件读入内存。 同样,您不能使用StreamReader在文件末尾添加一行。 您可能要使用StreamWriter。

更新:不像其他人所说的那样计算缓冲和操作系统缓存

StreamReader使用FileStream打开文件。 FileStream存储Windows句柄,由CreateFile()API函数返回。 在32位操作系统上,它是4个字节。 FileStream还具有一个byte []缓冲区,默认情况下为4096字节。 该缓冲区避免了每次读取调用都必须调用ReadFile()API函数。 StreamReader本身具有一个小的缓冲区,可以使文件中的文本解码效率更高,默认为128字节。 并且它具有一些私有变量来跟踪缓冲区索引以及是否已检测到BOM。

所有这些加起来只有几千字节。 用StreamReader读取的数据当然会占用程序堆中的空间。 如果将每个字符串存储在一个列表中,则总计可能多达12兆字节。 您通常想避免这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM