C#增加了读取二进制数据的大小

时间:2018-01-30 18:54:49

标签: c#

我正在使用Jon Skeet's article中的以下代码。最近,需要处理的二进制数据增长了很多倍。我尝试导入的二进制数据大小文件大小约为900 mb,差不多1 gb。如何增加内存流大小。

public static byte[] ReadFully (Stream stream)
{
    byte[] buffer = new byte[32768];
    using (MemoryStream ms = new MemoryStream())
    {
        while (true)
        {
            int read = stream.Read (buffer, 0, buffer.Length);
            if (read <= 0)
                return ms.ToArray();
            ms.Write (buffer, 0, read);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您的方法返回一个字节数组,这意味着它将返回文件中所有的数据。您的整个文件将被加载到内存中。

如果这是您想要做的,那么只需使用内置的File方法:

byte[] bytes = System.IO.File.ReadAllBytes(string path);
string text = System.IO.File.ReadAllText(string path);

如果您不想将整个文件加载到内存中,请利用Stream

using (var fs = new FileStream("path", FileMode.Open))
using (var reader = new StreamReader(fs))
{
    var line = reader.ReadLine();
    // do stuff with 'line' here, or use one of the other
    // StreamReader methods.
}

答案 1 :(得分:0)

您不必增加MemoryStream的大小 - 默认情况下,它会展开以适应内容。

显然可以有problems with memory fragmentation,但您可以预先分配内存以避免它们:

using (MemoryStream ms = new MemoryStream(1024 * 1024 * 1024))  // initial capacity 1GB
{
}

在我看来,这些天1GB应该没什么大不了的,但如果可能的话,最好以块的形式处理数据。这就是Streams的设计目标。