2010-10-01 3 views
0

Мне интересно, будет ли использование AsParallel ускорить мой код так, как мы его используем.AsParallel с классическим ADO.NET

я пишу здесь некоторые очень упрощенный псевдокод, чтобы проиллюстрировать, что я имею в виду:

Давайте скажем 3 SqlCommand под тем же SqlConnection, как это (псевдокод):

RunADOQueryForRequest() // returns one row 
RunADOQueryForRequestAnswer() // returns about 100 rows 
RunADOQueryForOtherStuff() // returns about 1000 rows (slow query) 

затем создать 3 Список объектов (DTO), что держит все данные:

MakeRequest() 
MakeRequestAnswers() 
MakeOtherStuffList() 

будет ли это улучшить производительность, если я бы запустить этот код, как параллельно (3 Параллельные задачи)?

Я знаю, что есть много, если и когда. Но стоит ли писать такой код для Parallel?

ответ

1

Я не думаю, что класс SqlConnection является потокобезопасным, поэтому вам обязательно нужно создать отдельный экземпляр SqlConnection для каждой задачи. Тогда я думаю, что это может ускорить загрузку данных (но это во многом будет зависеть от механизма базы данных).

Ваши комментарии в первом фрагменте предполагают, что последняя операция занимает большую часть времени. Если это значительно медленнее, чем первые две операции, то нет смысла запускать эти три параллельно (потому что это не будет быстрее, чем время, необходимое для выполнения последней задачи).

Параллельное создание трех объектов может быть проще, но это зависит от того, выполняете ли вы сложную обработку в трех методах. Если нет, то я предполагаю, что загрузка данных из базы данных, вероятно, занимает большую часть времени.

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