- Регистрация
- 30.05.2019
- Сообщения
- 3 564
- Благодарностей
- 1 367
- Баллы
- 113
Доброго времени. Работаю с базой данных MySQL через C#, пример статьи как это делать - брал отсюда. Все бы ничего, да возникла проблема, если в общий код мы добавляем для корректной работы:
А потом Zenno-кубике используем примерно такое:
То в таком случае, в многопотоке мы получаем вот такую картину:
На скрине выше видно, что соединения не прерваны, а просто ушли в Sleep(Спать), что не очень хорошо в многопотоке, так как очень сильно нагружает хостинг и потом возникают проблемы.
Как же можно решить данную проблему, что бы нормально закрывались соединения без попадания в сон, а сразу же полностью вырубались?
Общий Код:
using MySql.Data.MySqlClient;
using MySql.Data;
public class DB
{
private string hostname;
private string username;
private string password;
private string database;
private string charset;
private string result;
private MySqlConnection conn;
//
public DB(string db_hostname, string db_username, string db_password, string db_database, string db_charset = "utf8")
{
hostname = db_hostname;
username = db_username;
password = db_password;
database = db_database;
charset = db_charset;
result = String.Empty;
string db_port = "3306";
var m = db_hostname.Split(':');
if (m.Length == 2)
{
db_hostname = m[0];
db_port = m[1];
}
var connectionString = "server=" + db_hostname + ";user=" + db_username + ";database=" + db_database + ";port=" + db_port + ";password=" + db_password + ";pooling=true;" + "charset=" + charset + ";";
conn = new MySqlConnection(connectionString);
open();
}
public void open()
{
conn.Open();
}
public void close()
{
conn.Close();
//conn.Dispose();
//MySqlConnection.ClearAllPools();
}
public void query(string query)
{
using (MySqlCommand command = new MySqlCommand(query, conn))
{
command.ExecuteNonQuery();
}
}
public List<string> getAll(string query, string fieldSeparator = "|")
{
var result = new List<string>();
MySqlCommand command = new MySqlCommand(query, conn);
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
List<string> fields = new List<string>();
for (int i = 0; i<reader.FieldCount; i++)
fields.Add(reader[i].ToString());
result.Add(string.Join(fieldSeparator, fields));
}
reader.Close();
return result;
}
public List<string> getRow(string query)
{
MySqlCommand command = new MySqlCommand(query, conn);
MySqlDataReader reader = command.ExecuteReader();
if (reader.Read())
{
List<string> result = new List<string>();
for (int i = 0; i<reader.FieldCount; i++)
result.Add(reader[i].ToString());
reader.Close();
return result;
}
reader.Close();
return new List<string>();
}
public string getOne(string query)
{
MySqlCommand command = new MySqlCommand(query, conn);
string result = "";
try
{
result = command.ExecuteScalar().ToString();
} catch
{
}
return result;
}
public string escapeString(string text)
{
return MySql.Data.MySqlClient.MySqlHelper.EscapeString(text);
}
}
Как же можно решить данную проблему, что бы нормально закрывались соединения без попадания в сон, а сразу же полностью вырубались?