我为游戏开发了一个仿真程序。该程序与 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;
}
}
我迫切需要一些建议。谢谢。