Я надеюсь, что кто-то может дать мне некоторое представление об этой странности. Я не знаю, есть ли какая-то утечка или мой способ использования MongoDB не прав. Я скопировал код из MongoDB CSharp ecosystem tutorial. Когда я начал возиться с ним, я заметил, что время для выполнения запроса постепенно возрастало. Я использую C# 4.5, MongoDB 2.4.5 и работает под управлением Windows 7.Выполнение запроса MongoDB снова и снова с использованием C# и замедления
Время выполнения начального запроса заняло около 33 мс, но с каждой итерацией цикла он постепенно увеличивается. Каждый раз, когда я запускаю этот код, время запроса начинается примерно с 33 мс, но увеличивается до 61 мс. Если я использую идентификатор, он начинается с 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);
}
}
}
Хм, как он себя ведет при выполнении 1000 или 5000 запросов? Увеличиваются ли времена? Возможно, это связано с пулом соединений. Кроме того, вы можете устранить потенциальные проблемы профилирования, как описано в этой статье: http://www.codeproject.com/Articles/61964/Performance-Tests-Precise-Run-Time-Measurements-wi – mnemosyn
Интересно! ... при 1000 итерациях потребовалось почти две секунды, которые по совпадению были примерно в то же время, что и программа. Поэтому я переместил эту строку «Секундомер sw = новый секундомер();» внутри цикла for, и он решил проблему. Таким образом MongoDB работает очень хорошо, и это было мое незнание с использованием секундомера, не называя «Сброс». Спасибо за информацию! – Stu