gpt4 book ai didi

c# - 写入 FileStream 时 c# 中的 OutOfMemoryException

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:43 26 4
gpt4 key购买 nike

C# 中的 OutOfMemoryExcetpion ... 我正在尝试创建一个主要基于 BPlus 树的新索引。该索引应该用于大量数据(超过 50 000 000 个项目)。为了使索引更快,我将内部树节点(每个节点有大约 4KB 的信息,256 个对子节点的引用)保存在 RAM 中(它们经常被访问)。叶子(可变大小)被写入磁盘,最大为 200MB 的文件。
为了从文件中写入或读取数据,我使用了以下内容:

FileStream _FS = new FileStream(FullPath, FileMode.OpenOrCreate);
...
byte[] Data = new byte[size];
_FS.Read(Data, 0, size);
...
_FS.Write(Data, 0, _BlockSize);

问题是在插入项目数量较多时 (19 000 000) 我得到了 OutOfMemoryException。我知道树的内部结构(内部节点)可能会占用大量内存,但是,我相信这不是内存已满的原因。

当我使用以下构造函数时:

_FS = new FileStream(FullPath, FileMode.OpenOrCreate, FileAccess.ReadWrite,
FileShare.None, 1024, FileOptions.WriteThrough | Settings.FILE_FLAG_NO_BUFFERING);

不会引发 OutOfMemoryException(至少不会引发 20 000 000 个项目),但是,插入项目的速度较小。我相信在使用第一个 FileStream 构造函数时,.net 使用一些内部缓冲区(在 RAM 中),它会填充内存并导致引发 OutOfMemoryException。

问题是,如何使用 FileStream(或其他东西)以便能够在不引发 OutOfMemoryException 的情况下高速插入项目(写入磁盘)?

最佳答案

如果您将 _FS.Flush() 放入第一个示例的循环中,比如每 10000 条记录,会发生什么情况?

关于c# - 写入 FileStream 时 c# 中的 OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8224154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com