public override void Dispose() { if (!IsDisposed) { _pool.ReturnConnectionToPool(InnerClient); InnerClient = null; _pool = null; IsDisposed = true; } }
private void GetClientFromPool(KdbPlusConnectionStringBuilder builder) { // get existing pool try { _locker.AcquireReaderLock(-1); if (_pools.TryGetValue(builder, out _pool)) { InnerClient = _pool.GetConnection(); return; } } finally { _locker.ReleaseReaderLock(); } // create new pool try { _locker.AcquireWriterLock(-1); if (!_pools.TryGetValue(builder, out _pool)) { _pool = Factory.CreatePool(builder); _pools.Add(builder, _pool); } } finally { _locker.ReleaseWriterLock(); } InnerClient = _pool.GetConnection(); }
public PooledKdbPlusDatabaseClient(KdbPlusDatabaseClientPool pool) : base(GetConnection(pool)) { _pool = pool; }
private static KdbPlusDatabaseClient GetConnection(KdbPlusDatabaseClientPool pool) { Guard.ThrowIfNull(pool, "pool"); return(pool.GetConnection()); }
public override KdbPlusDatabaseClient CreatePooledClient(KdbPlusDatabaseClientPool pool) { return(new PooledKdbPlusDatabaseClient(pool)); }