[英]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.