如何在c#中为MongoQuery计时

本文关键字:MongoQuery 计时 中为 | 更新日期: 2023-09-27 18:06:13

我尝试在c#中对索引为

的列计时Mongo查询:
DateTime startTime = DateTime.Now;
MongoCollection<BsonDocument> voteCol = database.GetCollection<BsonDocument>("XXX");
var query = new QueryDocument("YYY", "23915");
MongoCursor<BsonDocument> cursor = voteCol.Find(query).SetSortOrder(SortBy.Descending("ZZZ")).SetLimit(10).SetSkip(20);
TimeSpan elapsedTime = DateTime.Now - startTime;
Console.WriteLine("Elapsed: {0}, in seconds: {1}, in milliseconds: {2} ", 
elapsedTime, elapsedTime.TotalSeconds, elapsedTime.TotalMilliseconds, cursor.Count());

每次都等于0,然后得到结果。这意味着它太快了还是我错过了什么?

如何在c#中为MongoQuery计时

这是因为您实际上没有从mongodb加载数据。数据将在开始迭代MongoCursor时加载。您可以很容易地使用ToList方法从数据库加载数据:

var data = voteCol.Find(query)
    .SetSortOrder(SortBy.Descending("ZZZ"))
    .SetLimit(10)
    .SetSkip(20)
    .ToList();

我还建议使用秒表来评估经过的时间。

就像Andrew说的,直到你开始遍历游标,Mongo才真正执行查询,所以你的查询没有被执行。

Stopwatch类可能是最好的方式来计时从您的应用程序的查询,但你也可以使用MongoDB数据库分析器基准你的查询在数据库

try Stopwatch