我目前正在编写一个多线程聊天服务,并且在 MySql 中遇到了一些我似乎无法找到解决方案的错误。
我目前正在使用“MySqlHelper”类来利用 MySql 的连接池:
public User GetUser(string Email)
{
try
{
string Escape = MySqlHelper.EscapeString(Email);
string Query = String.Format("SELECT * FROM `users` WHERE `email` = '{0}' LIMIT 1", Escape);
using (MySqlDataReader reader = MySqlHelper.ExecuteReader(databaseLoader.connectionString.ToString(), Query))
{
if (!reader.HasRows)
{
return null;
}
while (reader.Read())
{
string messages = reader["messages"].ToString();
var OfflineMessages = new List<UserMessagePair>();
if (reader["messages"].ToString() != "")
{
foreach (var msg in ListSerializer.Deserialize(messages))
{
var pair = ListSerializer.Deserialize(msg);
OfflineMessages.Add(new UserMessagePair(int.Parse(pair[0]), pair[1]));
}
}
return new User()
{
ID = int.Parse(reader["id"].ToString()),
Email = reader["email"].ToString(),
Password = reader["password"].ToString(),
Nickname = reader["nickname"].ToString(),
Status = reader["status"].ToString(),
About = reader["about"].ToString(),
Role = (Misc.Type.RoleType) Enum.Parse(typeof (Misc.Type.RoleType),
reader["role"].ToString(),
true),
Premium = bool.Parse(reader["premium"].ToString()),
Rooms = ListSerializer.Deserialize(reader["subscriptions"].ToString()),
Device = (Misc.Type.DeviceType) Enum.Parse(typeof (Misc.Type.DeviceType),
reader["devicetype"].ToString(),
true),
lastIPAddress = reader["ipaddress"].ToString(),
uniqueID = reader["uniqueid"].ToString(),
Contacts = ListSerializer.Deserialize(reader["contacts"].ToString()),
CustomTag = reader["tag"].ToString(),
OnlineStatus = int.Parse(reader["onlinestatus"].ToString()),
Messages = int.Parse(reader["messagecount"].ToString()),
LastTime = reader["lasttime"].ToString(),
UserNotes = reader["notes"].ToString(),
OfflineMessages = OfflineMessages,
Exists = true
};
}
return null;
}
}
catch
{
return null;
}
}
确实没有抛出正式的错误 - 一段时间后会发生什么(在 30-40 个用户连接后)库将停止连接?我认为这是因为超出了最大池大小(我将其设置为 100,000),是否有一种有效的方法来管理池连接并确保不会发生超出此限制的情况,因为 Oracle 在其网站上声称(http:/ /dev.mysql.com/doc/refman/5.0/en/connector-net-programming-connection-pooling.html)它会自动为您管理连接,但这似乎没有正确发生......
老实说,我不确定发生了什么,因为没有抛出异常,而且它只是不起作用。
有没有人像这样大规模使用连接器/网络并遇到问题?因为我遇到了无数的问题,似乎无法找到解决这个问题的方法。
另一个问题是,除了使用连接器/网络之外,还有其他选择吗?
非常感谢!(对不起,如果我含糊不清,我真的不知道这里发生了什么......)