私は現在、マルチスレッド チャット サービスを作成している最中で、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 に設定しています)。プールされた接続を管理し、これを超えないようにする効率的な方法はありますか。オラクルは Web サイト ( http:/ /dev.mysql.com/doc/refman/5.0/en/connector-net-programming-connection-pooling.html )接続を自動的に管理しますが、これは適切に行われていないようです...
正直なところ、例外がスローされておらず、単に機能しないため、何が起こっているのか正確にはわかりません。
このような大規模なコネクタ/ネットを使用して問題に遭遇した人はいますか? 数え切れないほどの問題に遭遇したため、これを修正する方法が見つからないようです。
別の質問は、コネクタ/ネットを使用する以外に他の選択肢はありますか?
本当にありがとう!(漠然としていたらすみません、ここで何が起こっているのか本当にわかりません..)