将连接释放回MongoDB连接池

时间:2013-08-05 19:30:35

标签: c# mongodb insert threadpool connection-pooling

我有一个C#应用程序,它通过C#ThreadPool将多线程插入到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)); 
        }
    }

1 个答案:

答案 0 :(得分:1)

我意识到我的线程池实际上并不限于8个线程。如果将0作为ThreadPool.SetMax / Min线程的参数之一传入,则无法设置max(但不是显式)。