我正在研究一个问题,它需要在一个非常大的图上进行BFS遍历。假设1个顶点最多可以有2^32个边连接到其他顶点。 我试过使用System.Collection.Queue,但我快速得到一个内存不足的例外。什么是在c#中实现队列的最佳方式(System.Collection.Queue有内存限制)
我也尝试使用FileStream来实现Queue persist到文件,但它真的很慢。从支持的文件中没有像RemoveFirstLine这样的方法。为了删除第一行,我必须RealAllLine,删除内存对象中的第一行,然后写回文件。
我想知道是否有任何现有的第三方库实现这样一个队列,而不用担心内存。
如果不是,那么在c#中实现它的最好方法是什么。 什么是最好的FileXXXX类可以做的工作。
如果阻止你这样做的异常是'OutOfMemoryException',那么你将无法在不使用文件系统的情况下实现这么大的队列。 –
如果您在应用内的任何数据结构中实现自己的队列,则会遇到内存问题。 几点建议:1)使用文件系统2)使用外部消息队列,例如。 Redis,AWS SQS,RabbitMQ等 –
我确实考虑用File系统来实现这样一个队列,抽象接口不是太复杂。只是入队,出队。但是,我没有找到正确的.net类来高效地完成它。请参阅上文。 我还没有想过Redis,AWS SQS,RabbitMQ。我不确定在这里是否需要异步消息队列。 –