- 优化 初始化时若数据库超时,则放弃预热;

This commit is contained in:
28810 2019-03-08 12:10:32 +08:00
parent eb6244e0ba
commit 766fe901d7
5 changed files with 47 additions and 10 deletions

View File

@ -2,6 +2,7 @@
using SafeObjectPool; using SafeObjectPool;
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data; using System.Data;
using System.Data.Common; using System.Data.Common;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@ -59,8 +60,15 @@ namespace FreeSql.MySql {
Regex.Replace(connStr, poolsizePatern, $"Max pool size={PoolSize}", RegexOptions.IgnoreCase) : Regex.Replace(connStr, poolsizePatern, $"Max pool size={PoolSize}", RegexOptions.IgnoreCase) :
$"{connStr};Max pool size={PoolSize}"; $"{connStr};Max pool size={PoolSize}";
var initConns = new Object<DbConnection>[poolsize]; var initConns = new List<Object<DbConnection>>();
for (var a = 0; a < poolsize; a++) try { initConns[a] = _pool.Get(); } catch { } 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); foreach (var conn in initConns) _pool.Return(conn);
} }
} }

View File

@ -74,8 +74,15 @@ namespace FreeSql.Oracle {
Regex.Replace(connStr, poolsizePatern, $"Max pool size={PoolSize}", RegexOptions.IgnoreCase) : Regex.Replace(connStr, poolsizePatern, $"Max pool size={PoolSize}", RegexOptions.IgnoreCase) :
$"{connStr};Max pool size={PoolSize}"; $"{connStr};Max pool size={PoolSize}";
var initConns = new Object<DbConnection>[poolsize]; var initConns = new List<Object<DbConnection>>();
for (var a = 0; a < poolsize; a++) try { initConns[a] = _pool.Get(); } catch { } 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); foreach (var conn in initConns) _pool.Return(conn);
} }
} }

View File

@ -69,8 +69,15 @@ namespace FreeSql.PostgreSQL {
Regex.Replace(connStr, poolsizePatern, $"Maximum pool size={PoolSize}", RegexOptions.IgnoreCase) : Regex.Replace(connStr, poolsizePatern, $"Maximum pool size={PoolSize}", RegexOptions.IgnoreCase) :
$"{connStr};Maximum pool size={PoolSize}"; $"{connStr};Maximum pool size={PoolSize}";
var initConns = new Object<DbConnection>[poolsize]; var initConns = new List<Object<DbConnection>>();
for (var a = 0; a < poolsize; a++) try { initConns[a] = _pool.Get(); } catch { } 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); foreach (var conn in initConns) _pool.Return(conn);
} }
} }

View File

@ -1,6 +1,7 @@
using SafeObjectPool; using SafeObjectPool;
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data; using System.Data;
using System.Data.Common; using System.Data.Common;
using System.Data.SqlClient; using System.Data.SqlClient;
@ -63,8 +64,15 @@ namespace FreeSql.SqlServer {
Regex.Replace(connStr, poolsizePatern, $"Max pool size={PoolSize}", RegexOptions.IgnoreCase) : Regex.Replace(connStr, poolsizePatern, $"Max pool size={PoolSize}", RegexOptions.IgnoreCase) :
$"{connStr};Max pool size={PoolSize}"; $"{connStr};Max pool size={PoolSize}";
var initConns = new Object<DbConnection>[poolsize]; var initConns = new List<Object<DbConnection>>();
for (var a = 0; a < poolsize; a++) try { initConns[a] = _pool.Get(); } catch { } 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); foreach (var conn in initConns) _pool.Return(conn);
} }
} }

View File

@ -71,8 +71,15 @@ namespace FreeSql.Sqlite {
Attaches = (idx == -1 ? att[1] : att[1].Substring(0, idx)).Split(','); Attaches = (idx == -1 ? att[1] : att[1].Substring(0, idx)).Split(',');
} }
var initConns = new Object<DbConnection>[poolsize]; var initConns = new List<Object<DbConnection>>();
for (var a = 0; a < poolsize; a++) try { initConns[a] = _pool.Get(); } catch { } 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); foreach (var conn in initConns) _pool.Return(conn);
} }
} }