如何从C#计时MongoQuery

时间:2011-08-22 08:27:46

标签: c# mongodb mongodb-.net-driver

我尝试在带有索引的列上用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,我得到结果。 这是否意味着它太快或者我错过了什么?

3 个答案:

答案 0 :(得分:4)

这是因为你实际上没有从mongodb加载数据。当您开始遍历MongoCursor时,将加载数据。您可以轻松使用ToList方法从数据库加载数据:

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

我还建议使用Stopwatch来评估已用时间。

答案 1 :(得分:0)

尝试Stopwatch

答案 2 :(得分:0)

就像Andrew说的那样,Mongo实际上并没有执行查询,直到你开始迭代游标,所以你的查询没有被执行。

Stopwatch类可能是从应用程序计算查询的最佳方式,但您也可以使用MongoDB Database Profiler在数据库中对查询进行基准测试。