MongoDB C#驱动程序“游标未找到”

6

我有一个非常耗费资源的操作,在一个vb.net应用程序中运行几个小时的MongoCursor循环(通过c#驱动程序)。我不太确定是什么原因,但过一段时间后就会遇到异常。

Cursor not found

这可能是由于光标超时引起的,也许?有没有办法阻止它发生?如果是超时问题,我该如何设置更长的超时时间?

3个回答

17

您可以通过调用以下代码在C#驱动程序中禁用光标超时:

cursor.SetFlags(QueryFlags.NoCursorTimeout);
否则将在10分钟内无活动时关闭。

参考资料


2
如果您没有将游标耗尽到最后一个元素,这将导致Mongo中的内存泄漏。 - Nashenas
您也可以更改批处理大小(根据https://dev59.com/oWAf5IYBdhLWcg3w3lyl#24200795 - 这是一个Python问题,但使用C# mongo驱动程序应该也是可能的) - drevicko

2
进一步说明JohnnyHK的回答,这是语法格式:
MongoCursor<BsonDocument> cursor = myCollection
                                   .Find(query)
                                   .SetSortOrder(SortBy.Ascending("TrackingNumber"))
                                   .SetFlags(QueryFlags.NoCursorTimeout);

1

我正在使用MongoDB.Driver版本2.4.4,但IFindFluent没有包含SetFlags方法。我改用以下方法:

cursor.Options.NoCursorTimeout = true;

1
如果将NoCursorTimeout设置为true并且您已经用尽了游标,会发生什么?是否会有任何内存泄漏或性能问题? - suresh rajput

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接