什么是在c#中实现队列的最佳方法(System.Collection.Queue有内存限制)

时间:2017-06-13 02:29:11

标签: c# queue out-of-memory

我正在处理一个问题,需要在一个非常大的图上进行BFS遍历。假设1个顶点最多可以有2 ^ 32个边连接到其他顶点。 我尝试使用System.Collection.Queue,但是我很快得到了一个内存不足的例外。

我也尝试过使用FileStream来实现一个队列持久化文件,但它确实很慢。没有像支持文件中的RemoveFirstLine这样的方法。为了删除第一行,我必须使用RealAllLine,删除内存对象中的第一行,然后写回文件。

我想知道是否有任何现有的第三方库实现这样的队列而不用担心内存。

如果不是,那么在c#中实现它的最佳方法是什么。 什么是最好的FileXXXX类可以完成这项工作。

1 个答案:

答案 0 :(得分:1)

队列很难做到正确,但如果您正在处理超大型数据集,那么您一定要确保a)将其保存在永久存储中b)确保多个进程/线程可以同时访问导致腐败或重复工作。除非您有一些非常具体的要求,否则我强烈建议您使用第三方实施。我还要添加c)确保即使在严重故障之后也有某种方法可以恢复处理(例如断电,这可能发生在一个进程处理消息的一半时)。 FWIW一个相当简单的多进程安全实现可以使用每个队列消息1个文件,并利用独占的读锁访问来确保只有一个进程可以随时读取新文件(并删除该文件而不是释放锁完成后。)