1

我为游戏开发了一个仿真程序。该程序与 MySQL 一起用于数据库通信。我尝试使用 IDisposable 方法(大多数人都建议),当特定线程需要与数据库有关时,将 MySQL 连接分配给线程。但是,当服务器达到 400 多个用户时,MySQL 服务器会因请求而过载。我也尝试了池选项(大小:最小 0,最大 150) - 它导致了同样的问题。

目前,我正在使用锁定来提供并行系统。该系统使用静态对象(静态连接对象)来管理整个服务器(我认为它会影响多线程提供的性能)。

public static Boolean Query(ref MySqlDataReader Resource, String Query)
{
    lock (Connection)
    {
        MySqlCommand Cmd = new MySqlCommand(Query, Connection);

        try
        {
            Resource = Cmd.ExecuteReader();
        }
        catch (MySqlException Exception)
        {
             Console.WriteLine("MySQL Error: " + Exception.Message);
             return false;
        }

        return true;
    }
}

一种与“查询”方法一起使用的方法。

public static String GetObjectProperty(
                 String Field, String Identifier, 
                 Boolean Primary = true, String Table = "Accounts")
{
    String FieldValue = null;
    try
    {
        lock (GeneralDB.Connection)
        {
            MySqlDataReader DataReader = null;
            if (GeneralDB.Query(
                          ref DataReader, 
                          "SELECT " + MySqlHelper.EscapeString(Field) + 
                          " FROM " + Table + 
                          " WHERE " + (Primary ? "ID" : "Name") + " = '" + 
                          MySqlHelper.EscapeString(Identifier) + "';") == false)
            {
                return null;
            }
            if (DataReader == null) return null;
            while (DataReader.Read()) 
                FieldValue = DataReader[0].ToString();
            DataReader.Close();
            return FieldValue;
        }
    }

    catch (Exception Exception)
    {
        return FieldValue;
    }
}

我迫切需要一些建议。谢谢。

4

0 回答 0