0

私は現在、マルチスレッド チャット サービスを作成している最中で、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 )接続を自動的に管理しますが、これは適切に行われていないようです...

正直なところ、例外がスローされておらず、単に機能しないため、何が起こっているのか正確にはわかりません。

このような大規模なコネクタ/ネットを使用して問題に遭遇した人はいますか? 数え切れないほどの問題に遭遇したため、これを修正する方法が見つからないようです。

別の質問は、コネクタ/ネットを使用する以外に他の選択肢はありますか?

本当にありがとう!(漠然としていたらすみません、ここで何が起こっているのか本当にわかりません..)

4

0 に答える 0