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.
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)
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 ?