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

What is best way to implement a queue in c#(System.Collection.Queue has memory limitation)

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

我也试过使用 FileStream 来实现一个队列持久化到文件,但是它确实是 slow.There 不支持像 RemoveFirstLine from file 这样的方法。为了删除第一行,我必须使用 RealAllLine,删除内存对象中的第一行,然后写回文件。

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

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

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