Правка:
Моя проблема больше не проблема: я повторил свои тесты производительности и сделал фатальную глупую ошибку: я забыл x1000, чтобы получить секунды из миллисекунд :/ Извините за это, ребята.
Для информации:
- Я делаю около 1900 обновлений в секунду со своего ПК на сервер базы данных в локальной сети.
- 3200 обновлений в секунду, если программы находятся на той же машине, что и БД.
- 3500 обновлений в секунду с моего ПК на сервере базы данных я не создаю заново и повторно не открываю новый SQLConnection.
- 5.800 обновлений в секунду с пакетным текстом. Для моих 10 000 строк, если это займет 5 секунд, это нормально для моих программ. Извините, что побеспокоил вас.
На самом деле, я использую хранимую SQL-процедуру для создания строки в моей базе данных, чтобы избежать SQL-инъекций. В С# у меня есть следующий метод:
public void InsertUser(string userCode)
{
using (SqlConnection sqlConnection = new SqlConnection(this.connectionString))
{
SqlCommand sqlCommand = new SqlCommand("InsertUser", sqlConnection);
sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
sqlCommand.Parameters.Add(new SqlParameter("@UserCode", userCode));
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();///0.2 seconds !ERROR HERE! 0.2ms here,NOT 0.2sec!!!
}
}
Это прекрасно работает, когда мне нужно вставить одну или две строки. Но если мне нужно создать 1000 пользователей и 10000 продуктов и 5000 домашних животных, это не лучшее решение: я потеряю огромное время в сетевом транспорте.
Я считаю, что без проверки я могу использовать только ограниченное количество обратных вызовов. Поэтому я не хочу звонить 10 000 раз:
sqlCommand.BeginExecuteNonQuery()
Другим способом будет создание пакетного текста, но есть риск SQL-инъекции (и это некрасиво).
Есть ли объект SqlCommandList, который управляет этим в .Net? Как сделать большую запись в базе данных? Какой хороший патерн для этого?