以下代码需要5秒才能完成40次迭代。我不认为这与MongoDb有任何关系,因为过滤器应该立即构建,并且应该在这里进行调用,而不是等待。如果您在此处看到每次迭代需要超过1000秒的任何内容,请告诉我们:
//There are 40 categories
foreach (var category in categories)
{
var filter = Builders<BsonDocument>.Filter.In("CurrentOfficeId", officesIds)
& Builders<BsonDocument>.Filter.Eq("CategoryId", category.Id);
if (userId > 0) filter &= Builders<BsonDocument>.Filter.Eq("SubmittedById", userId);
pendingCallsForItemCountPerCatArray[numberOfCatBeingIterated] = mongoItemsCollection
.Find(filter)
.CountAsync();
}
编辑:请注意,我尝试在上一次调用完成之前进行每次调用。否则代码如下:
callResult[numberOfCatBeingIterated] = await mongoItemsCollection
编辑2:我确认该呼叫正在生成Task<long>
,而不是长。我还确认,通过注释掉调用会将迭代次数降低到0秒,我们知道,但我只是在确认。
答案 0 :(得分:1)
可能是因为你总是用.Find(过滤器)迭代mongoItemsCollection吗?
答案 1 :(得分:1)
每当代码“花费很长时间”执行时 - 这是一个很好的理由看看mongoDB中的内容: - )。
db.setProfilingLevel(2,20)
db.system.profile.find()。limit(100).sort({ts:-1})。pretty()
db.setProfilingLevel(0)
因为一次有40个呼叫,每次呼叫125毫秒/看起来相当不错(想象一下你在每次查询时都有锁)