微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用C#将大数据写入MemoryStream

如何解决用C#将大数据写入MemoryStream

我有一个大流 (4Go),我需要替换该流中的某个字符(我需要用 2 或 3 个字符替换一个特定字符),我从 à serviceà.d 获取流我必须返回返回一个流。 这就是我正在做的

private static Stream UpdateStream(Stream stream,string oldCharacters,string newCharacters,int size = 2048)
{
    stream.Position = 0;

    StreamReader reader = new StreamReader(stream);

    MemoryStream outputStream = new MemoryStream();
    StreamWriter writer = new StreamWriter(outputStream);
    writer.AutoFlush = true;

    char[] buffer = new char[size];

    while (!reader.EndOfStream)
    {
        reader.Read(buffer,buffer.Length);
        if (buffer != null)
        {
            string line = new string(buffer);
            if (!string.IsNullOrEmpty(line))
            {
                  string newLine = line.Replace(oldCharacters,newCharacters);
                writer.Write(newLine);
            }
        }
    }

    return outputStream;
}

但我在这一行的某个时候收到 OutOfMemory 异常,但在查看计算机内存时,我仍然有可用的植物。

writer.Write(newLine);

有什么建议吗?

解决方法

这不是答案,但我无法将其放入评论中。

目前,如果不做一些假设,您的问题是无法解决的。据我所知,问题在于您想要替换保存在文件中的大量文本的某些部分,然后再次将修改后的文本保存在文件中。

一些未知变量:

  • 您要替换的字符串有多长?
  • 您要替换的字符串有多长?与替换字符串的长度相同吗?
  • 您想更换什么类型的字符串?一个字?一个完整的句子?整个段落?

您的问题的解决方案是将文件分块读入内存,替换必要的文本并将“更新”文本保存在新文件中,然后最后将“新文件”重命名为旧文件的名称.但是,在不知道以上几点的答案的情况下,您可能想要替换文件中所有文本一样的字符串(不太可能,是的)。这意味着为了进行“替换”,我必须将整个文件读入内存,然后才能替换任何文本,这会导致 OutOfMemoryException。 (是的,您可以进行一些巧妙的扫描来替换如此大的字符串,而无需立即将其全部读入内存,但我怀疑这里是否需要这样的解决方案)。

edit解决上述问题。

,

所以为了让它工作,我必须:

enter image description here

  • 并将构建设置为 64 位(首选 32 位未选中)

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。