我正在使用OrientDB v2.2.16和C# driver v0.1.12.0。我找不到有关如何使用此驱动程序的新迭代创建连接池的任何文档。 ODatabase构造函数具有connectionPool参数:

ODatabase db=new ODatabase("localhost", 2424, "testDb", ODatabaseType.Graph, "USER", "PASSWORD", "Pool");


但是无法创建“ Pool”。驱动程序的旧版本在OClient类中包含一个CreateDatabasePool函数:

OClient.CreateDatabasePool("localhost", 2424, "testDb", ODatabaseType.Graph, "USER", "PASSWORD", 10, "Pool");


新的没有。在第一次调用ODatabase构造函数时,池是否会自动创建自己?如果是这样,我如何控制诸如池大小的参数?

最佳答案

池在第一次调用该池时是否自发地创建自己
  ODatabase构造函数?


实际上,构造器查看the source会自动创建一个连接池:

public ODatabase(string hostName, int port, string databaseName, ODatabaseType type, string userName, string userPassword)
{
    _connectionPool = new ConnectionPool(hostName, port, databaseName, type, userName, userPassword);
    ClientCache = new ConcurrentDictionary<ORID, ODocument>();
}



  如果是这样,我如何控制诸如池大小的参数?


观察the code for the ConnectionPool object,没有任何直接方法可以显式地控制池化连接的数量:

public Connection GetConnection()
{
    if (_connectionPool.ContainsKey(_poolAlias))
        return _connectionPool[_poolAlias];

    var connection = new Connection(_hostName, _port, _databaseName, _type, _userName, _userPassword, _sslCerts);
    _connectionPool.AddOrUpdate(_poolAlias, i => connection,
        (i, conn) => _connectionPool[i] = conn);

    return connection;
}


如您所见,连接在ODatabase对象实例的生存期内保持不变。因此,控制池大小的唯一方法是控制ODatabase对象的生存期以及用于“ poolAlias”的值。

请注意,即使不指定poolAlias,在构造此对象时也会始终创建一个池。在这种情况下,别名设置为“默认”。

07-28 10:00