应用程序启动后第一次查询的MongoDb C#驱动程序速度很慢

时间:2015-05-15 15:34:23

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

我正在使用C#驱动程序测试MongoDB(3.0),我注意到一些奇怪的东西。

我开始测试db localy,然后创建了测试控制台应用程序。在那里,我这样做来初始化驱动程序:

var client = new MongoClient();
var database = client.GetDatabase("test");

到目前为止一直很好,但后来我尝试根据id(默认为索引)获取数据,所以我添加了这个:

var collection = database.GetCollection<BsonDocument>("myData");
var filter = Builders<BsonDocument>.Filter.Eq("id", "F1234");
var result = collection.Find(filter).ToListAsync().Result;

为了获得平均时间消耗,我添加了代码来测量查询的时间(通过使用两个DateTime.Now进行装饰然后减去它们 - 我知道,脏)并将所有代码放在循环中。另外,我让每个迭代时间显示在控制台上

现在,每当我点击F5时,第一次迭代大约需要150ms,但下一次迭代平均约为1ms。重要的是,这与缓存无关,因为每次迭代都可以查询不同的id,结果完全相同。此外,我可以在每次迭代时再次初始化MongoClient,但它总是按照我的描述运行。

应用启动后的每个第一个查询都需要更多时间。

我需要知道,如果这真的是由于MongoClient内部的一些初始化(可能是某些静态类是初始化的第一个查询?),或者这是否可能在运行应用程序时随时发生。

注意 : 我还尝试用Thread.Sleep替换查询,以确保它不是某些.NET问题。事实并非如此。它实际上是“collection.Find”,首次使用需要更多时间。

谢谢!

请注意一段时间

所以过了一段时间,我发现每个CRUD操作都需要它的“热身优先请求”。有时每个集合上的每个CRUD操作。奇怪。我发布这个让别人知道: - )

0 个答案:

没有答案