Bonjour,
Comme beaucoup le savent, entity n'est pas thread safe.
D'ou mon code suivant qui permet de télécharger des fichiers xml et d'en extraire des données que je met en base
Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Dim LesDatas As New EDB_V3Entities Static Dim lock As New Object 'Liste des articles sur EDB avec mappage constructeur ICECAT Dim query = (From art In LesDatas.Article...).ToList 'Récupération des fiches techniques mises à jour, en paralléle Dim po As New ParallelOptions po.MaxDegreeOfParallelism = 20 Parallel.ForEach(query, po, Sub(LArt) Try RefArtErr = LArt.RefArt ConstIceErr = LArt.IdConstIceCat SyncLock lock GetArticleSolo(LArt, LesDatas) LesDatas.SaveChanges() End SyncLock Catch ex As Exception HelperJournal.WriteException(ex, "Ref Art:" & RefArtErr & " Const IceCat:" & ConstIceErr.ToString) End Try End Sub)
Le problème est que du coup ce n'est plus vraiment du parallélisme.
Est-ce que c'est mieux? Certes je parallélise mais je crée 20 connexions simultanées à ma base, en espérant qu'à la fin du thread il fait bien le ménage. La mise à jour est sur 4 ou 5 champs d'une table. Donc le download devrait etre plus long que le save change, non ?
Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Parallel.ForEach(query, po, Sub(LArt) Try RefArtErr = LArt.RefArt ConstIceErr = LArt.IdConstIceCat Dim Datas As New EDB_V3Entities GetArticleSolo(LArt, Datas ) Datas .SaveChanges() Catch ex As Exception HelperJournal.WriteException(ex, "Ref Art:" & RefArtErr & " Const IceCat:" & ConstIceErr.ToString) End Try End Sub)
Partager