Ram中的C#2Gb文件是4gb.为什么?

Iva*_*her 3 c# file filestream textreader

我正在读取一个文件(该文件由一个长度为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;
        }
Run Code Online (Sandbox Code Playgroud)

当所有数据放入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;
            }
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 16

在这里受过教育的猜测:

该文件是UTF-8ASCII编码,并且(大多数情况下)包含单字节宽字符(或者可能是一些主要是单字节宽的其他代码页).

现在,.NET字符是UTF-16,它们的长度都是2(或更多)字节.

因此,在内存中,字符的大小将增加一倍.