После профилирования приложения и отладки исходного кода драйвера я обнаружил, что узкое место возникает в методе BsonMemberMap.GetPropertySetter(). В частности, LambdaExpression компилируется каждый раз при выполнении запроса, вызывая чрезмерную активность JIT.
Код: Выделить всё
BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); });
BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); });
var client = new MongoClient(connectionString);
var db = client.GetDatabase("WebApplication");
var collection = db.GetCollection("DynamicApplication");
for(int i=0; i p.Id == "003566cd-3a51-4a24-9842-c32b01db0600")
.Select(p => new GetDbCodesRespDto
{
AppId = p.InternalId,
DbCode = p.DbCode
})
.ToListAsync();
}
Версия драйвера MongoDB .NET: 3.7.1
Состояние JIT

------------------------------------------------------------------------------Обновлено------------------------------------------------

Это обходной путь, который я нашел на данный момент:
Код: Выделить всё
d = await collection.Find(p => p.Id == "003566cd-3a51-4a24-9842-c32b01db0600")
.Project(
Builders.Projection
.Include("InternalId")
.Include("DbCode"))
.ToListAsync();
var result = d.Select(p => new GetDbCodesRespDto
{
AppId = p.InternalId,
DbCode = p.DbCode
}).ToList();