je vois dans le XmlDocument
class documentation sur MSDN"Les membres statiques publics de XmlDocument sont thread-safe Tous les membres d'instance ne sont pas garantis d'être thread-safe.": Oui, mais
Tout public static (Shared en Visual Basic) les membres de ce type sont thread-safe. Les membres d'instance ne sont pas garantis être thread safe.
Même chose pour la classe XmlNodeList
. J'utilise ces classes dans le contexte suivant. A l'intérieur d'un Parallel.Foreach
que je fais:
X MyX = new X();
string XMLstring = MyX.GetXML(ID, true);
XmlDocument doc = new XmlDocument();
doc.LoadXml(XMLstring);
XmlNodeList nodeList = doc.SelectNodes("blah/secondblah");
où X
est défini dans une bibliothèque informatique de la fournissent à moi et où ID
est un int
(à peu près sur laquelle boucle I).
Cela a été testé à fond dans un contexte non parallèle, les string
s produits par GetXML
sont en effet correct, le XmlDocument
correspondant aussi bien, et « l'analyse syntaxique » via XmlNodeList
fournit les résultats escomptés.
Maintenant, il ce contexte parallèle et en supposant que X
et GetXML
sont en effet thread-safe, le fait que je new
un XmlDocument
dans chaque boucle assure la sécurité des threads ou non? Je veux dire, comment puis-je savoir que le membre string
(tout d'abord est-il une telle chaîne? Comme je ne vois aucune propriété string
dans le document) de XmlDocument
recevoir le LoadXml
est static
ou non?
Je suppose que je ne comprends pas vraiment le peu de documentation MSDN je cite ci-dessus ...
Je confirme que 'doc' (et' nodeList' et d'autres variables 'non-thread-safe') sont utilisés uniquement dans le contexte d'un seul thread. A propos du document: Je ne vois que des "membres", pas des "méthodes". Je suis assez nouveau à 'C#', donc j'ai manqué un point de vocabulaire ou? –
"Membres" inclut les méthodes (code) et les propriétés (données). – Polyfun
Dans le contexte de cette question, les membres et les méthodes sont équivalents. Toutes mes excuses pour avoir changé la terminologie sur vous. – mjwills