我已经做了两件事情来帮助解决这个问题上使用的是.NET 4的IIS 7.5。
完整的代码我用的是:
string path = u.MapPath("~/bin/MySql.Data.dll");
Assembly ms = Assembly.LoadFrom(path);
Type type = ms.GetType("MySql.Data.MySqlClient.MySqlPoolManager");
MethodInfo mi = type.GetMethod("GetPool", BindingFlags.Static | BindingFlags.Public);
var pool = mi.Invoke(null, new object[] { new MySqlConnectionStringBuilder(ConnectionString) });
Type mip = ms.GetType("MySql.Data.MySqlClient.MySqlPool");
MemberInfo[] mei1 = mip.GetMember("inUsePool", BindingFlags.NonPublic);
totalAvailable = (int)pool.GetType().InvokeMember("available", BindingFlags.GetField | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance, null, pool, new object[] { });
var o = pool.GetType().InvokeMember("inUsePool", BindingFlags.GetField | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null, pool, new object[] { });
var o1 = pool.GetType().InvokeMember("idlePool", BindingFlags.GetField | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null, pool, new object[] { });
inUseCount = (int)o.GetType().InvokeMember("Count", BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public, null, o, null);
idleCount = (int)o1.GetType().InvokeMember("Count", BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public, null, o1, null);
你用什么MySQL驱动程序版本?我使用的是6.9.9.0,我不明白我所看到的数字。 'available'等于'maximumpoolsize'。 inUsePool和idlePool 0大部分时间;有时候其中一个数字是1,但我不记得是哪一个。我期望我的inUsePool至少是两位数。我正在使用Window 2008 R2,IIS 7.5,和.NET 4.5。 – phi
我正在使用6.9.9。最后,对于这个特定的应用程序来说,连接池监视最终并没有特别有用。我们不会再犯这些错误了 - 解决方法是通过我们所有的遗留代码,并确保连接得到正确处理。 –