ファイルを読み込んでいます(このファイルは、長さが2GBの1つの長い文字列で構成されています)。
これは、ファイルのすべてのコンテンツをメモリに読み取り、文字列と場所を分割する私の関数です: *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;
}
すべてのデータがリストに配置されると、RAM で 4 GB を占有します。ファイルのサイズがわずか 2 GB の場合、これはどのように可能ですか?
*編集
これが私がやったことです。バイト配列を文字列に変換するのではなく、バイトを操作して渡すだけです。これは、4 GB ではなくメモリ内の 2 GB のみのフィールドでした。
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;
}