diff --git a/FreeSql/MySql/MySqlAdo/MySqlConnectionPool.cs b/FreeSql/MySql/MySqlAdo/MySqlConnectionPool.cs index 41355ae3..ac677353 100644 --- a/FreeSql/MySql/MySqlAdo/MySqlConnectionPool.cs +++ b/FreeSql/MySql/MySqlAdo/MySqlConnectionPool.cs @@ -2,6 +2,7 @@ using SafeObjectPool; using System; using System.Collections.Concurrent; +using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Text.RegularExpressions; @@ -59,8 +60,15 @@ namespace FreeSql.MySql { Regex.Replace(connStr, poolsizePatern, $"Max pool size={PoolSize}", RegexOptions.IgnoreCase) : $"{connStr};Max pool size={PoolSize}"; - var initConns = new Object[poolsize]; - for (var a = 0; a < poolsize; a++) try { initConns[a] = _pool.Get(); } catch { } + var initConns = new List>(); + for (var a = 0; a < PoolSize; a++) + try { + var conn = _pool.Get(); + initConns.Add(conn); + conn.Value.Ping(true); + } catch { + break; //预热失败一次就退出 + } foreach (var conn in initConns) _pool.Return(conn); } } diff --git a/FreeSql/Oracle/OracleAdo/OracleConnectionPool.cs b/FreeSql/Oracle/OracleAdo/OracleConnectionPool.cs index e108a45a..067baef2 100644 --- a/FreeSql/Oracle/OracleAdo/OracleConnectionPool.cs +++ b/FreeSql/Oracle/OracleAdo/OracleConnectionPool.cs @@ -74,8 +74,15 @@ namespace FreeSql.Oracle { Regex.Replace(connStr, poolsizePatern, $"Max pool size={PoolSize}", RegexOptions.IgnoreCase) : $"{connStr};Max pool size={PoolSize}"; - var initConns = new Object[poolsize]; - for (var a = 0; a < poolsize; a++) try { initConns[a] = _pool.Get(); } catch { } + var initConns = new List>(); + for (var a = 0; a < PoolSize; a++) + try { + var conn = _pool.Get(); + initConns.Add(conn); + conn.Value.Ping(true); + } catch { + break; //预热失败一次就退出 + } foreach (var conn in initConns) _pool.Return(conn); } } diff --git a/FreeSql/PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs b/FreeSql/PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs index 3c8f842c..1100a6e5 100644 --- a/FreeSql/PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs +++ b/FreeSql/PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs @@ -69,8 +69,15 @@ namespace FreeSql.PostgreSQL { Regex.Replace(connStr, poolsizePatern, $"Maximum pool size={PoolSize}", RegexOptions.IgnoreCase) : $"{connStr};Maximum pool size={PoolSize}"; - var initConns = new Object[poolsize]; - for (var a = 0; a < poolsize; a++) try { initConns[a] = _pool.Get(); } catch { } + var initConns = new List>(); + for (var a = 0; a < PoolSize; a++) + try { + var conn = _pool.Get(); + initConns.Add(conn); + conn.Value.Ping(true); + } catch { + break; //预热失败一次就退出 + } foreach (var conn in initConns) _pool.Return(conn); } } diff --git a/FreeSql/SqlServer/SqlServerAdo/SqlServerConnectionPool.cs b/FreeSql/SqlServer/SqlServerAdo/SqlServerConnectionPool.cs index b53f258c..29119c03 100644 --- a/FreeSql/SqlServer/SqlServerAdo/SqlServerConnectionPool.cs +++ b/FreeSql/SqlServer/SqlServerAdo/SqlServerConnectionPool.cs @@ -1,6 +1,7 @@ using SafeObjectPool; using System; using System.Collections.Concurrent; +using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.SqlClient; @@ -63,8 +64,15 @@ namespace FreeSql.SqlServer { Regex.Replace(connStr, poolsizePatern, $"Max pool size={PoolSize}", RegexOptions.IgnoreCase) : $"{connStr};Max pool size={PoolSize}"; - var initConns = new Object[poolsize]; - for (var a = 0; a < poolsize; a++) try { initConns[a] = _pool.Get(); } catch { } + var initConns = new List>(); + for (var a = 0; a < PoolSize; a++) + try { + var conn = _pool.Get(); + initConns.Add(conn); + conn.Value.Ping(true); + } catch { + break; //预热失败一次就退出 + } foreach (var conn in initConns) _pool.Return(conn); } } diff --git a/FreeSql/Sqlite/SqliteAdo/SqliteConnectionPool.cs b/FreeSql/Sqlite/SqliteAdo/SqliteConnectionPool.cs index da0c9514..4dda5649 100644 --- a/FreeSql/Sqlite/SqliteAdo/SqliteConnectionPool.cs +++ b/FreeSql/Sqlite/SqliteAdo/SqliteConnectionPool.cs @@ -71,8 +71,15 @@ namespace FreeSql.Sqlite { Attaches = (idx == -1 ? att[1] : att[1].Substring(0, idx)).Split(','); } - var initConns = new Object[poolsize]; - for (var a = 0; a < poolsize; a++) try { initConns[a] = _pool.Get(); } catch { } + var initConns = new List>(); + for (var a = 0; a < PoolSize; a++) + try { + var conn = _pool.Get(); + initConns.Add(conn); + conn.Value.Ping(true); + } catch { + break; //预热失败一次就退出 + } foreach (var conn in initConns) _pool.Return(conn); } }