Написал класс для работы с БД от SQL, однако в ходе работы создаётся дочерний процесс от SQL, который нагружает процессор на 20%, и потребляет 170 мб оперативы даже в простое.
Что не так?
static class SQL {
public class State {
public State(string name, string lastMessage, int messageCount, int messageLetterCount) {
this.name = name; this.lastMessage = lastMessage; this.messageCount = messageCount; this.messageLetterCount = messageLetterCount;
}
public string name, lastMessage;
public int messageCount, messageLetterCount;
}
static string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\My Documents\Visual Studio 2017\Project\ARRA_bot_GUI\ARRA_bot_GUI\MessageDatabase.mdf;Integrated Security=True";
public static async Task Insert(string name, string message, string channel) {
using (var sqlConnection = new SqlConnection(connectionString)) {
await sqlConnection.OpenAsync();
if (!await IsCreatedTable(channel)) await createTeble(channel);
int messageCountNew = 0, messageCountLetterNew = 0;
SqlCommand command = new SqlCommand($@"update [{channel.ToLower()}]
set
[LastMessage] = @LastMessage,
[MessageCount] = @MessageCount,
[MessageLetterCount] = @MessageLetterCount
where [Name] = @Name;
if @@rowcount = 0
insert into [{channel.ToLower()}] (Name, LastMessage, MessageCount, MessageLetterCount)
values (@Name, @LastMessage, @MessageCount, @MessageLetterCount);", sqlConnection);
State state = await getState(name, channel);
if (state != null) {
messageCountNew += state.messageCount;
messageCountLetterNew += state.messageLetterCount;
}
command.Parameters.AddWithValue("Name", name.ToLower());
command.Parameters.AddWithValue("LastMessage", message);
command.Parameters.AddWithValue("MessageCount", messageCountNew + 1);
command.Parameters.AddWithValue("MessageLetterCount", messageCountLetterNew + message.Length);
await command.ExecuteNonQueryAsync();
}
}
public static async Task<State> getState(string name, string channel) {
using (var sqlConnection = new SqlConnection(connectionString)) {
await sqlConnection.OpenAsync();
if (!await IsCreatedTable(channel)) return null;
SqlCommand command = new SqlCommand($"SELECT * FROM [{channel.ToLower()}] WHERE [Name] = @Name", sqlConnection);
command.Parameters.AddWithValue("Name", name.ToLower());
using (SqlDataReader dataReader = await command.ExecuteReaderAsync()) {
State state = null;
try {
dataReader.Read();
state = new State(name,
Convert.ToString(dataReader["LastMessage"]),
Convert.ToInt32(dataReader["MessageCount"]),
Convert.ToInt32(dataReader["MessageLetterCount"]));
} catch (Exception) {
}
return state;
}
}
}
private static async Task<bool> IsCreatedTable(string name) {
using (var sqlConnection = new SqlConnection(connectionString)) {
await sqlConnection.OpenAsync();
SqlCommand command = new SqlCommand($"SELECT count(*)FROM information_schema.TABLES WHERE (TABLE_NAME = '{name.ToLower()}')", sqlConnection);
var result = await command.ExecuteScalarAsync();
return (int)result == 1;
}
}
private static async Task createTeble(string channel) {
using (var sqlConnection = new SqlConnection(connectionString)) {
await sqlConnection.OpenAsync();
SqlCommand command = new SqlCommand($@"CREATE TABLE [dbo].[{channel.ToLower()}]
([Name] NVARCHAR(50) NOT NULL,
[LastMessage] NVARCHAR(MAX) NOT NULL,
[MessageCount] INT NOT NULL,
[MessageLetterCount] INT NOT NULL)", sqlConnection);
await command.ExecuteNonQueryAsync();
}
}
}
Если что, обращаюсь к нему так:
SQL.Insert(q, w, e).GetAwaiter();
SQL.getState(q, w).Result;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Помогите разобраться с ошибкой Notice: Undefined index: image в переменной $post_image и $post_image_tmp Что не так?
В интернете много статей про websocket, какой он быстрый и замечательный, но нигде не нашёл информации как сделать соединение безопасным
есть лист задача на PHP + phpMyAdmin, по коду всё вроде правильно, не выбивает никакой ошибки, но не задания не добавляются в сам лист и БДВот код,...