Я установил самую последнюю 64-битную БД MongoDB и официальный драйвер C # по состоянию на 13 марта 2012 года. Я получаю некоторые неожиданные результаты производительности с курсорами.
Следующий код будет извлекать и перебирать 500 000 записей со скоростью около 26,8к / с на моем ноутбуке Core 2 Duo 2 ГГц:
var query = Query.EQ("_H._t", "Car");
var cursor = mc.FindAs<RoctObj>(query);
double priceTot = 0d;
foreach (RoctObj item in cursor)
{
Car car = (Car)item._H;
priceTot += car.Price;
}
Это кажется разумным.Затем я настроил запрос так, чтобы возвращались только 721 результат.Выполнение кода занимает более 1,1 секунды, чем при замене сегмента foreach на:
long i = cursor.Count();
Учитывая скорость первого примера, 721 запись должна занимать доли секунды для итерации.Я знаю, что есть и другие накладные расходы, но они должны быть такими плохими.Я не понимаю, почему я получаю +1,1 секунды.
Есть идеи?
РЕДАКТИРОВАТЬ
Вот альтернативный запрос.Обратите внимание, что время запроса не является вопросом.Это время итерации.
var query = Query.And(
Query.LTE("_H.Price", BsonDouble.Create(80000d)).GTE(BsonDouble.Create(40000d)),
Query.LTE("_H.Cylinders", BsonDouble.Create(8d)).GTE(BsonDouble.Create(4d)),
Query.LTE("_H.Capacity", BsonDouble.Create(3000d)).GTE(BsonDouble.Create(2000d)),
Query.LTE("_H.TopSpeed", BsonDouble.Create(200d)).GTE(BsonDouble.Create(100d))
);