問題があり、助けが必要です。約 400MB の XML ファイルを保存する必要があります。これに使っSystem.Xml.Linq.XDocument.Save()
ています。System.Xml.Linq.XDocument.Save()
通常は問題ありませんが、ハードドライブがいっぱいになるまで、同じ XML の無限ループで XML データを保存するという奇妙な動作が時々発生します。同じ XML-Data をもう一度取得すると、問題はなく、すべて正常に動作します。そのため、今までこの動作を再現することはできませんでした。
私は新しいサーバーを手に入れましたが、System.Xml.Linq.XDocument.Save() が呼び出されるたびに得られる唯一の結果です! 完全に再現可能です...これが新しい環境です
- .Net Framework 4 (4.5 も)
- Windows Server 2008 R2 標準 SP1
- 32GB ラム
- 64ビット
- すべてのアップデートがインストールされています
手伝ってくれてありがとう!
コード スニペットは次のとおりです。
xmlImp = new XDocument(
new XDeclaration("1.0", null, null),
new XDocumentType("Hotelstamm", null, "hotel.dtd", null),
HotelStamm);
string pathUTF8 = path.Replace(".xml", "-utf8.xml");
try
{
xmlImp.Save(pathUTF8);
}
catch (IOException)
{
}
編集:
問題は、複数のスレッドで Xml-Structure を作成したことと、XElement の .Add-Method がスレッドセーフではないことです。複数のスレッドで呼び出されると、Xml 構造が破損し、Xml が無限になり始めます。
問題は、アプリケーションが古いサーバーで約 95% 正常に動作することでした。しかし、新しいものでは、成功する可能性は 5% しかありませんでした。
古いサーバーでは、3回の試行でsinpmleループが機能しました。しかし、今ではロックを使用すると正常に動作します。