我遇到了问题,需要帮助。我需要保存一个 XML 文件,大约 400MB。我正在使用System.Xml.Linq.XDocument.Save()
这个。通常没问题,但有时我有一个奇怪的行为,System.Xml.Linq.XDocument.Save()
确实将 XML 数据保存在同一个 XML 中的无限循环中,直到硬盘驱动器耗尽。再次使用相同的 XML 数据,没有问题,一切正常。所以直到现在,重现这种行为是不可能的!
我有一个新服务器,现在这是我得到的唯一结果,每次调用 System.Xml.Linq.XDocument.Save() !它是绝对可重现的……这是新环境
- .Net Framework 4(也是 4.5)
- Windows Server 2008 R2 标准版 SP1
- 32 GB 内存
- 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-Stucture 并且 Xml 开始变得无限。
问题是应用程序在我们的旧服务器上运行良好,大约 95%。但在新的上它只有 5% 的机会成功。
在旧服务器上,一个带有 3 次尝试的 sinpmle 循环使其工作。但是现在锁定它可以正常工作。