【问题标题】:OutOfMemoryException with MemoryStream()带有 MemoryStream() 的 OutOfMemoryException
【发布时间】:2013-01-28 02:36:40
【问题描述】:

我在这段 C# 代码中遇到了 OutOfMemoryException 的问题。

private void SaveZip(IDataReader reader, string header, string fileName, Ionic.Zip.ZipFile zip)
    {
        using (var stream = new MemoryStream())
        {
            using (var writer = new StreamWriter(stream, Encoding.ASCII))
            {
                writer.WriteLine(header);
                while (reader.Read())
                {
                    writer.WriteLine(reader.GetString(0)); //exception occurs here
                }

                writer.Close();
            }

            zip.AddEntry(fileName, stream.ToArray());
        }
    }

代码尝试将 DataReader 对象写入文件,该文件在过程结束时被压缩。问题是 Reader 包含大量数据,大约 150MB,当我尝试将流写入内存时,它引发了异常。 我该如何解决这个问题?

感谢您的帮助!

【问题讨论】:

  • 此代码是否适用于较小的数据集?

标签: c#-3.0 out-of-memory memorystream


【解决方案1】:

如果您没有足够的内存来将数据处理到内存缓冲区,那么您将不得不将其存储在内存之外,例如磁盘。例如将MemoryStream 替换为FileStream

【讨论】:

  • 好的,但这需要很多时间,不是吗?有没有办法拆分数据?
  • 您可以使用BufferedStream 包装FileStream 以获得最大大小的内存缓冲区。
猜你喜欢
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 2011-04-19
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多