2010-10-01 4 views
0

Je me demande si l'utilisation par AsParallel accélèrerait mon code dans la façon dont nous l'utilisons.AsParallel avec ADO.NET classique

J'écris ici un code pseudo très simplifié, pour illustrer ce que je pense:

Disons que 3 SqlCommand sous le même SqlConnection comme celui-ci (code de pseudo):

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

puis créer 3 liste des objets (de DTO) qui contient toutes les données:

MakeRequest() 
MakeRequestAnswers() 
MakeOtherStuffList() 

ne serait-il améliorer les performances si je courrais ce code en parallèle (3 tâches parallèles)?

Je sais qu'il y a beaucoup si et quand. Mais cela vaut-il la peine d'écrire un tel code pour Parallel?

Répondre

1

Je ne pense pas que la classe SqlConnection soit thread-safe, donc vous devez absolument créer une instance distincte de SqlConnection pour chacune des tâches. Ensuite, je pense que cela pourrait accélérer le chargement des données (mais cela dépendra largement du moteur de base de données). Vos commentaires dans le premier extrait suggèrent que la dernière opération prend le plus de temps possible. Si cela est significativement plus lent que les deux premières opérations, il est inutile d'exécuter les trois en parallèle (car ce ne serait pas plus rapide que le temps nécessaire pour exécuter la dernière tâche).

La mise en parallèle de la création des trois objets pourrait être plus facile, mais cela dépend si vous effectuez un traitement compliqué dans les trois méthodes. Si non, alors je suppose que le chargement des données de la base de données prend probablement le plus de temps.