我希望有人能给我一些关于这种奇怪的看法。我不知道是否有某种泄漏或我使用MongoDB的方式是古怪的错误。我从MongoDB CSharp ecosystem tutorial复制了一些代码。当我开始搞砸它时,我注意到执行查询的时间逐渐增加。我正在使用C#4.5,MongoDB 2.4.5,并运行Windows 7。
执行初始查询的时间大约为33毫秒,但随着循环的每次迭代,它逐渐增加。每次运行此代码时,查询时间从大约33毫秒开始,但增加到61毫秒。如果我使用ID,它将在15毫秒开始,并增加到34毫秒。我还尝试将Linq和本机EQ样式语法与Query对象一起使用,并且具有类似的增加结果。我希望每次迭代都能增加和减少时间,但不会不断增加。我是MongoDB的新手,这是我第一次看到它是2天前,所以任何洞察力,以找出正在发生的事情或我使用代码的方式有什么问题将不胜感激。 (为什么我这样做 - 我偶然发现同一个查询变得越来越慢并且好奇)
using System;
using System.Diagnostics;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
namespace Snippets
{
public class Entity
{
public ObjectId Id { get; set; }
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
var connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
var server = client.GetServer();
var database = server.GetDatabase("test");
var collection = database.GetCollection<Entity>("entities");
var entity = new Entity { Name = "X" };
collection.Insert(entity);
var query = Query<Entity>.Where(e => e.Name == "X");
for (int i = 0; i < 100; i++)
{
sw.Start();
var item = collection.FindOne(query);
sw.Stop();
Console.WriteLine("{0:0} ms", sw.ElapsedMilliseconds);
}
collection.Remove(query);
}
}
}
答案 0 :(得分:0)
当然它会变慢,因为您需要在Name
上对集合编制索引,因为您在collection.FindOne(query);
字段上执行查询Name
过滤。
答案 1 :(得分:0)
答案是我在Start()之前未调用Reset()而错误地使用了秒表。所以这实际上与MongoDB无关。