Я использую пул потоков для выполнения тяжелой обработки, а также биты sql. В настоящее время я открываю соединения SQL, когда они мне нужны, запускаю запрос и затем закрываю их. Это отлично работает. Приложение работает без проблем. Чем больше работы выполняется этим приложением, тем больше потоков. Больше потоков означает больше открытия / закрытия соединений SQL. В SQL 2005 это фактически забивает сервер. Мой тестовый сервер выполняет около 175 транзакций в секунду. Приблизительно 150 из них выполняются в базе данных master и являются «ValidateSQLLogin».
Я собираюсь изменить приложение так, чтобы у каждого потока было свое собственное соединение, а затем это соединение передавалось по потоку.
Итак, мой вопрос:
Если объект соединения SQL создается локально в потоке и затем передается по ссылке в статическую функцию другого класса, это будет небезопасно?
void ThreadA()
{
SqlConnection a = new SqlConnection(....);
MyStaticClass.DoStuff(ref a);
}
void ThreadB()
{
SqlConnection b = new SqlConnection(....);
MyStaticClass.DoStuff(ref b);
}
static void MyStaticClass.DoStuff(ref SqlConnection sql)
{
// Do stuff with sql
}
Сначала я думал, что это будет небезопасно, поскольку все 10 потоков могут одновременно вызывать одну и ту же статическую функцию, каждый из которых передает свой собственный объект соединения.
Ранее статические функции открывали свои собственные соединения и закрывали их, когда они были сделаны.
Если это небезопасно, какой лучший способ обойти это? Мне нужно попытаться минимизировать открытие / закрытие соединений Sql.
Спасибо
Gareth