2017-06-05 4 views
1

は私が「XmlDocumentオブジェクトのすべてのパブリックstaticメンバーは、インスタンスメンバーの場合は、スレッドセーフであるとは限りませんスレッドセーフです。」:はい、しかし

すべてのパブリックstaticは(ビジュアルで共有されていることがMSDNにXmlDocument class documentationで見ますBasic)のメンバーはスレッドセーフです。どのインスタンスメンバーもスレッドセーフであるとは限りません。

XmlNodeListクラスの場合と同じことです。

私はこれらのクラスを以下の文脈で使用しています。 Parallel.Foreach内部で私が行います

XはITのは、私に提供して IDは(おおよそIループ、その上に) intでいるライブラリで定義されて
X MyX = new X(); 
string XMLstring = MyX.GetXML(ID, true); 
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(XMLstring); 
XmlNodeList nodeList = doc.SelectNodes("blah/secondblah"); 

。これは、非平行文脈で十分にテストされてい

GetXMLによって生成string Sは同様に、実際に対応XmlDocument正しい、と期待される結果を提供XmlNodeListを介してそれを「解析します」。

今は、この並列コンテキストとXGetXMLが実際にスレッドセーフであると仮定し、私はnewすべてのループでXmlDocumentはスレッド安全性を確保するかということは、ありませんか?つまり、stringメンバー(まず最初に、そのような文字列がありますか?プロパティがドキュメントに表示されないため)XmlDocumentLoadXmlであることがstaticであるかどうかを知るにはどうすればよいですか?

私はドキュメントがXmlDocument.MethodCallようになり静的である任意の方法は、(スレッドセーフであることを。それISN意味

答えて

2

...私は本当に私は上記引用していMSDNドキュメントのビットを理解していないと仮定「tはあなたに関連する - 。あなたはそれらのいずれかを呼び出していない他の方法(例えばdocに対する)は静的ではありません - 。そう彼らは、スレッドセーフであることが保証されていません

あなたのコードは、100%の罰金になりますdoc(およびnodeListと他の 'スレッドセーフではない'変数)がcon内でのみ使用されている限り単一のスレッドのテキスト。

ですから、Parallel.ForEach前docを埋め、その後はParallel.ForEachdocを使用した場合 - それは動作しません。

しかし、あなたは移入とParallel.ForEachdocを使用した場合(各スレッドが自身のdoc'-ので、スレッドの安全性が問題になりませんでしょうので)あなたは罰金になります。

私たちが一見するためには、100%確実であるには、メソッド全体(Parallel.ForEach呼び出しを含む)を投稿する必要があります。

+0

'doc'(と' nodeList'と他の 'スレッドセーフではない'変数)が単独のスレッドのコンテキスト内でのみ使用されることを確認します。この文書について:私は、「メソッド」ではなく、「メンバ」という言葉しか見ません。私は 'C#'にかなり新しいので、いくつかの語彙のポイントを逃したのですか? –

+0

"メンバー"には、メソッド(コード)とプロパティ(データ)が含まれます。 – Polyfun

+0

この質問の文脈では、メンバーとメソッドは同等です。あなたの用語を変更するためのお詫び。 – mjwills

1

はいスレッドセーフです。スレッド間で何も共有していません。私は大きなマルチスレッドアプリケーションで問題なく同じようなXmlDocumentコードを使用しました。理論的には、XmlDocumentに私たちがスレッドセーフではないことを知らない私的静的データがあるかもしれませんが、私の経験ではそうではありません。私は、MSDNのドキュメントは、Microsoftがスレッド間で共有される静的なものが実際にはスレッドセーフであることを確認したことを暗示していると思います。

+0

はい、「スレッドセーフではないことがわからない、XmlDocument内のプライベート静的データが存在する可能性があります。 –

+0

@mjwillsがあなたの前に答えたので、私は彼の答えを受け入れるだろうが、あなたのものは私を元気づける!ありがとう。 –

関連する問題