我在文件中读取(此文件由一个长度为2gb的长字符串组成)。
这是我的函数,它将文件的所有内容读入内存,然后拆分字符串并放置: * reader = StreamReader
public List<char[]> GetAllContentAsList()
{
int bytesToRead = 1000000;
char[] buffer = new char[bytesToRead];
List<char[]> results = new List<char[]>();
while (_reader.Read(buffer, 0, bytesToRead) != 0)
{
char[] temp = new char[bytesToRead];
Array.Copy(buffer,temp,bytesToRead);
results.Add(temp);
}
return results;
}
当所有数据放入List时,RAM占用4gb。当文件大小只有2GB时,这怎么可能?
*编辑
这就是我最终做的事情。我没有将字节数组转换为字符串,我只是在操作它们时传递字节。这个场景只有2Gb而不是4gb
public List<byte[]> GetAllContentAsList()
{
int bytesToRead = 1000000;
var buffer = new byte[bytesToRead];
List<byte[]> results = new List<byte[]>();
while (_reader.Read(buffer, 0, bytesToRead) != 0)
{
//string temp = Encoding.UTF8.GetString(buffer);
byte[] b = new byte[bytesToRead];
Array.Copy(buffer,b,bytesToRead);
results.Add(b);
}
return results;
}