2

У меня есть exe, который работает на сервере непрерывно для пакетной обработки тысяч файлов, данные из файла вставляются в базу данных для всех файлов, в которых используется одна и та же строка соединения. Я использовал TPL для .net 4 для повышения производительности. Основной поток кода следующим образом, поскольку я не знаю много о пуле соединений, следующий подход приведет меня к неприятностям. Пожалуйста, предложите. Благодарю.Пул соединений с параллельной библиотекой задач в .NET 4

Flow: 1. создать массив задач (около 50 Задания для 50 файлов) 2. Добавьте каждую задачу к задаче массив 3. ожиданий для всех задач и повторите следующие 50 файлов

    Task[] taskArry = new Task[50]; 
        for (int i = 0; i < 50; i++) 
        { 
         taskArry[i]=(Task.Factory.StartNew(() =>       InstanceDataObject.InserData())); 

         //var t2 = Task.Factory.StartNew(() => InsertData()); 
        } 

         Task.WaitAll(taskArry); 

Ключевым моментом здесь является то, что я инициирую свой объект подключения для каждой задачи в методе InsertData(), поскольку каждая задача должна выполняться с транзакцией, поэтому 50 соединений созданы для 50 задач, это повлияет на производительность?

internal static void InserData(string insPath, int filingId) 
     { 
      try 
      { 
       DataAccess dataAcess = new DataAccess(true); 
       // insert operation here 
       dataAcess.CommitTransaction(); 
      } 
      finally 
      { 
       dataAcess.Dispose(); 
       _dbmanager = null; 

      } 
} 

Я использую строку соединения, как этот «Сервер = Test; User ID = пользователь; Password = @ 1234; баз данных = тест» в качестве подключения по умолчанию объединения включен для СВЯЗИ строки я не установлен параметры, связанные с объединением. Shall i have to set the parameter regarding connection pooling? для моего сценария

+0

просто попробуйте – Bond

+0

Я не получил, попробуй что? – kevin159

+0

попробуйте с/без подключения пула и посмотрите, что быстрее – Bond

ответ

0

Теоретически, да, это должно быть быстрее.

В действительности, это зависит от того, сколько времени требуется для выполнения InsertData(). Если это достаточно медленно, то каждая из 50 задач может создать свои собственные соединения (потому что пул всегда пуст), и поэтому вы не получите преимущества из пула соединений.

Лучшее, что нужно сделать, это попробовать ваш код с включенным и отключенным пулом и посмотреть, что лучше (попробуйте максимально точно смоделировать производственную среду - сетевая латентность и производительность клиента и сервера будут иметь большие различия к вашим данным).

Вы также можете использовать счетчики производительности, встроенные в ADO.NET (http://msdn.microsoft.com/en-us/library/ms254503.aspx), чтобы помочь вам оценить, помогает ли вам пул или нет. Попробуйте запустить код с включенным объединением и посмотрите на счетчик NumberOfPooledConnections - если это меньше 50, то вы успешно повторно используете соединения.

Смежные вопросы