Дэвид Браун дал вам ответ на вопрос, но может быть что-то еще, что вам нужно знать:
Допустим, я работаю над службой Windows, выполняющей 10 потоков. Все потоки используют один и тот же объект SqlConnection, но другой объект SqlCommand, и выполняют такие операции, как выбор, вставка, обновление и удаление, либо в разных таблицах, либо в одной и той же таблице, но с разными данными.
Этот дизайн кажется неправильным по нескольким направлениям :
- У вас есть доступный ресурс и он открыт. Мое правило для Disposeable: «Создать. Использовать. Утилизировать. Все в одном фрагменте кода, в идеале с использованием блока using». Хранение одноразового материала вокруг или даже совместное использование его между потоками просто не стоит опасности забыть его закрыть.
Нет преимущества в производительности: SqlConnection использует пул внутренних соединений без каких-либо побочных эффектов. И даже если имеется соответствующее преимущество в скорости , они не стоят всех опасностей.
Вы используете многопоточное чтение с доступом к базе данных. Многопоточность - это один из способов реализации многозадачности, но не тот, который вам следует использовать, пока он вам не понадобится. Многопоточность полезна только при работе с ЦП. В противном случае вы обычно должны использовать async / await или аналогичные проверки. Операции с БД связаны либо с диском, либо с сетью.
Есть одно исключение из этого правила, и это если ваше приложение является сервером. Серверы - редкий пример того, что что-то приятно параллельно . Поэтому наличие большого пула потоков для обработки входящих запросов в параллельном режиме очень распространено. Однако довольно редко вы пишете один из них. В основном вы просто запускаете свой код в существующей серверной инфраструктуре, которая занимается этим.
Если у вас действительно тяжелая работа с процессором, скорее всего, вы теряете слишком много. Очень распространенная ошибка новичков - получить много, а затем выполнить фильтрацию в коде C#. Не делай этого. Сделайте как можно больше фильтрации и обработки в запросе. Вы не сможете превзойти скорость DB-сервера, и в лучшем случае вы ie бессмысленно настроите свою сеть.