我正在使用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,在构造此对象时也会始终创建一个池。在这种情况下,别名设置为“默认”。