Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Xml.Linq.XDocument.Save()导致硬盘驱动器满_C#_.net_Xml_Linq_Linq To Xml - Fatal编程技术网

C# System.Xml.Linq.XDocument.Save()导致硬盘驱动器满

C# System.Xml.Linq.XDocument.Save()导致硬盘驱动器满,c#,.net,xml,linq,linq-to-xml,C#,.net,Xml,Linq,Linq To Xml,我遇到了问题,需要帮助。我需要保存一个XML文件,大约400MB。我正在为此使用System.Xml.Linq.XDocument.Save()。通常这没有问题,但有时我会有一种奇怪的行为,System.Xml.Linq.XDocument.Save()将Xml数据以无休止的循环方式保存在同一个Xml中,直到硬盘驱动器失效。再次获取相同的XML数据,没有问题,一切正常。所以直到现在,这种行为还不可能重现 我得到了一个新服务器,现在这是我得到的唯一结果,每次调用System.Xml.Linq.XD

我遇到了问题,需要帮助。我需要保存一个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结构,XElement的.Add方法不是线程安全的。如果在多个线程中调用它,则会破坏Xml结构,Xml开始变得无限大

问题是,应用程序在我们的旧服务器上大约95%运行良好。但在新的测试中,成功的几率只有5%。

在旧服务器上,通过3次尝试的sinpmle循环使其工作。但是现在使用锁定可以很好地工作。

重新检查代码时,我注意到您正在使用XDocument ctor

如果传递给构造函数的
HotelStamm
变量包含复杂的循环关系,则可能是无法在分层XML中有限表示

您可以尝试枚举
xmlImp.subjects()
,看看是否得到相同的竞争行为


如果是这样的话,你有一个有问题的循环关系,你需要简化。注意,这与运行代码的机器规格没有直接关系。

如果可以复制,请告诉我们如何复制。大概,您没有在具有该规范的机器上断言any
XDocument.Save()
调用会表现出这种行为,或者您是吗?我很悲观,这是一个会影响所有具有该规范的机器的通用问题,我想这更可能是特定构建的问题。但是,我没有在具有该规范的机器上使用
XDocument.Save()
保存400MB XML文件的经验。因此,我无法证实我的怀疑。@Jodrell:好吧,所有的服务器几乎都是一样的:alle 2008 R2,所有32 GB Ram,所有64位。它们都运行相同的运行时版本。下面是代码片段:
XmlImp=newxdocument(newxdeclaration(“1.0”,null,null),newxdocumenttype(“Hotelstamm”,null,“hotel.dtd”,null),Hotelstamm);字符串pathUTF8=path.Replace(“.xml”,“-utf8.xml”);尝试{XmlImp.Save(pathUTF8);}catch(IOException ioEx)
那么,如果只有一个出现了问题,有什么区别,或者,它们都这样做了吗?什么数据类型是
HotelStamm
?它是否包含具有父子关联的层次结构?非常感谢,实际上它是XML结构。解决了的!问题是我们在多个线程中创建了Xml结构,XElement的.Add方法不是线程安全的。如果在多个线程中调用它,则会破坏Xml结构,Xml开始变得无限大。