.NET driver legacy vs current performance

Comparing the legacy vs the newer implementation of the mongodb driver which allows for asynchronous queries, I’m seeing disappointing results.

We are using v2.7.3 of the mongodb c# driver and we use the repository pattern where we have a dedicated class per collection/document type to query.

Existing repo code for find one:

public virtual T Get(ObjectId Id)
    var collection = _adapter.GetCollection<T>(_collectionName);
    return collection.FindOneById(Id);

New repo code for find one:

public T FindOne(ObjectId id)
    return GetCollection().Find(Builders<T>.Filter.Eq("_id", id)).SingleOrDefault();

I expected not much of a difference but its much slower now. I’m testing by calling two endpoints in my REST api, one using our existing repository (legacy driver) and one using the new repository (new implementation).

Using apache benchmark, i ran 1000 requests total, 100 concurrently for each endpoint. The old repo returns in ~400ms on average, ~1600ms at worst. The new repo returns in ~2000ms on average, ~10000 ms at worst.

I really thought i’d see gains by making my endpoints async and using the async versions of the query:

public async Task<T> FindOneAsync(ObjectId id) {
     return await GetCollection().Find(Builders<T>.Filter.Eq("_id", id)).SingleOrDefaultAsync();

But even that returns in ~2000ms on average, ~3500 ms at worst.

Why such a difference?

I’m retaining the connection for both repos across requests (using autofac and registering both instances). For the legacy, this is an instance of MongoDatabase from server.GetDatabase(con.DatabaseName) . For the new implentation, this is an instance of an implementation of IMongoDatabase from client.GetDatabase(con.DatabaseName); .

It seems like there is no direct call to a findOne in the new driver, but i’ve tried first, firstordefault, single, singleordefault. Nothing seems as performant as the legacy driver.

Am I missing something? Is here more overhead in connecting in the new driver?
I tried upgrading my driver to 2.11.0 but had the same results.