使用太多内存读取文件流

时间:2014-01-06 12:59:29

标签: c# .net filestream

我想将一个文件读入到流base64string并且我使用下面的代码来读取文件,但是当我看到内存使用量超过900MB时,我通过任务监视它经理。我错过了什么,我可以看到当我将其读入字符串时,内存使用率会上升,(我使用了150 MB的文件来测试它)。

stringBuilder Sb=  new stringBuilder ();
using (var fs = new FileStream(@"C:\Users\Sanath Kumar\Desktop\s.pdf", FileMode.Open, FileAccess.Read))
{
    var buffer = new byte[fs.Length];
    fs.Read(buffer, 0, (int)fs.Length);
    Sb.Append(Convert.ToBase64String(buffer));
    buffer = null;
    fs.Flush();
    fs.Dispose();
}

1 个答案:

答案 0 :(得分:5)

这里的问题是你正在将文件全部读入内存并多次复制数据。

  • byte[]数组
  • StringBuilder支持数组
  • char[]

如果此文件的大小很大,这肯定会导致内存飙升。

不要一次性全部阅读,而是尝试使用ToBase64Transform类。这旨在使用Stream作为输入,并且将避免一次将整个文件加载到内存中。相反,它将以块的形式处理它。