0

MSDNによると、XmlSchemaSetクラスはスレッド セーフであることが保証されていません。

では、1 つのオブジェクトを参照する 1 つのオブジェクトで複数のXmlReaderオブジェクトを作成し、複数のスレッドから同時に使用することはできますか? それとも、バックグラウンドで新しいドキュメントを処理する必要があるたびに、新しいオブジェクトを作成して新しいコピーを割り当てる必要があるということですか?XmlReaderSettingsXmlSchemaSetXmlReaderSettingsXmlSchemaSet

これは非常に無駄になりそうです。特に、XmlSchemaSet新しいドキュメントごとにスキーマを再コンパイルする必要があるためです。

XmlWriterオブジェクトの答えは同じですか?

もちろん、XmlSchemaSet最初にデータを入力した後でオブジェクトを変更することはありません。Compileまた、最初に使用する前にメソッドを呼び出します。その後、読み取りのみが実行されるため、すべてが安全なはずですが、よくわかりません。

4

2 に答える 2

2

スレッドセーフではないと言われている場合は、(契約上) 共有したり、同時に使用したりすることはできません。

はうまくいくかもしれませんしかし、Microsoft は、動作が保証されていないと明言しています。そのため、今日は機能していても、次に .NET Framework をアップグレードしたときに機能しない場合があります (たとえば)。

http://referencesource.microsoft.com/#System.Xml/System/Xml/Schema/XmlSchemaSet.cs (例)でスレッド セーフではない他の型をHashtable使用する場合は、使用しないことを強くお勧めします。XmlSchemaSetスレッド間。読むだけであれば、XmlSchemaSet複数のスレッドで使用しても問題ないかもしれません (たとえば、複数のリーダーをサポートしているため)。HashtableXmlSchemaSet

于 2017-08-14T14:10:26.980 に答える