c# - 将连接释放回 MongoDB 连接池

标签 c# mongodb insert threadpool connection-pooling

我有一个 C# 应用程序,它通过 C# 线程池向 MongoDB 执行多线程插入。但是,我收到了 TimeoutException: Timeout waiting for a MongoConnection。我正在使用 MongoServer.RequestStart 方法,该方法应该将连接释放回 MongoClient 连接池。

此外,线程池最少有 4 个线程,最多有 8 个线程,而 Mongo 连接池默认有 100 个连接,所以我不应该用完连接。

那么为什么我会收到此错误?

这是传递到线程池的方法。 _client 是一个 MongoClient 实例变量。

public void BatchInsert(string collectionName, BinaryPacketDocument[] documents, int batchSize) {
        MongoServer server = _client.GetServer();
        MongoDatabase database = server.GetDatabase(_databaseName);
        using (server.RequestStart(database)) {
            MongoCollection collection = database.GetCollection(collectionName);
            collection.InsertBatch(documents);
            StatisticsManager.GetCounter("logs").Add(batchSize);    
        }
    }

下面是我如何将它传递到线程池中。

private void SendWorkToThreadPool(string collectionName, BinaryPacketDocument[] documents, int batchSize) {
        if (documents.Length != 0) {
            ThreadPool.QueueUserWorkItem(state => _inserter.BatchInsert(collectionName, documents, batchSize)); 
        }
    }

最佳答案

我意识到我的线程池实际上并没有限制为 8 个线程。如果您将 0 作为参数之一传递给 ThreadPool.SetMax/Min 线程,它将无法设置最大值(但不是明确的)。

关于c# - 将连接释放回 MongoDB 连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18066171/

相关文章:

c# - 如何在 Http 响应完成之前读取响应流

javascript - Mongoose 更新不起作用

mongodb - hadoop中的Analytics(分析)实现

sql - 插入到多个选择中

php - mysql插入值选择不存在

c# - ThreadPool.QueueUserWorkItem - 订单未保留?

c# - XmlRpc 调用未到达 MySql 服务器

c# - 无法连接到 MySql 数据库 - "SELECT command denied for user [...]"

javascript - 用 Mongoose 枚举数组

java - 如何实现基于多个比较器的 add() 排序列表;参数化比较器?