代码之家  ›  专栏  ›  技术社区  ›  Prashant

文件打开内存c#

c#
  •  0
  • Prashant  · 技术社区  · 16 年前

    例如,如果一个程序使用streamreader打开一个大小为6MB的文件,在文件末尾附加一行。程序是否会将整个6MB存储在内存中,直到文件关闭。或者是由.Net代码内部返回的文件指针,该行追加在末尾。因此,程序不会占用6MB内存

    4 回复  |  直到 16 年前
        1
  •  1
  •   Hans Passant    16 年前

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

    所有这些加起来只有几千字节。使用StreamReader读取的数据当然会占用程序堆中的空间。如果您存储 每一个 比如说,输入一个列表。你通常希望避免这种情况。

        2
  •  5
  •   danben    16 年前

    流的整个点是这样的,您不必在内存中保存整个对象。你可以根据需要逐条阅读。

    如果要附加到文件,应使用 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/en-us/library/system.io.file.appendtext.aspx

        3
  •  2
  •   Richard    16 年前

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

        4
  •  1
  •   Lucas    16 年前

    StreamReader将 将6MB的文件读入内存。此外,不能使用StreamReader在文件末尾追加一行。您可能需要使用StreamWriter。

    更新:不包括其他人提到的缓冲和操作系统缓存