0

我希望有人能给我一些关于这个奇怪的见解。我不知道是否存在某种泄漏,或者我使用 MongoDB 的方式很古怪。我从MongoDB CSharp 生态系统教程中复制了一些代码。当我开始弄乱它时,我注意到执行查询的时间逐渐增加。我正在使用 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);
        }
    }
}
4

2 回答 2

0

当然它会越来越慢,因为你需要在集合上建立索引,因为你对字段Name进行查询collection.FindOne(query);过滤。Name

于 2013-07-19T20:14:56.403 回答
0

答案是我没有在 Start() 之前调用 Reset(),从而错误地使用了秒表。所以这实际上与 MongoDB 无关。

于 2013-07-23T00:11:37.217 回答