我遇到了問題,需要幫助。我需要保存一個約400MB的XML文件。我爲此使用了System.Xml.Linq.XDocument.Save()
。通常情況下這是沒有問題的,但有時我得到了一個奇怪的行爲,System.Xml.Linq.XDocument.Save()
確實將XML-Data保存在同一個XML中的無限循環中,直到硬盤驅動器崩潰。再次採用相同的XML數據,並沒有問題,一切正常。所以直到現在,再現這種行爲是不可能的!System.Xml.Linq.XDocument.Save()導致完整的硬盤
我得到一個新的服務器,現在這是我得到的唯一結果,每次調用System.Xml.Linq.XDocument.Save()時!它是絕對可再現......這裏是新environement
- .Net框架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)
{
}
編輯:
的問題是,我們在多線程和的XElement的。新增-方法創建的XML的結構是不是線程-安全。如果它在多個線程中調用,則會損害Xml-Stucture,並且Xml開始變得無限。
問題是,我們的舊服務器上的應用程序運行良好,約95%。但是在新的方面,它只有5%的成功機會。
在舊的服務器上有3次嘗試的sinpmle循環使其工作。但現在鎖定它工作正常。
如果它的可重現性,告訴我們如何重現它。據推測,你沒有聲明任何具有該規範的機器上的'XDocument.Save()'調用會表現出這種行爲,或者你呢? – Jodrell
我很悲觀,這是一個通用的問題,會影響所有具有該規格的機器,我猜測它更可能是該特定版本的問題。但是,我沒有使用具有該規範的計算機上的'XDocument.Save()'來保存400MB XML文件的經驗。因此,我無法證實我的懷疑。 – Jodrell
@Jodrell:那麼,所有的服務器幾乎是一樣的:alle 2008 R2,全部32 GB RAM,全部64Bit。他們都運行相同的運行時版本。 以下是代碼片段: 'XmlImp = new XDocument( new XDeclaration(「1。0「,null,null), new XDocumentType(」Hotelstamm「,null,」hotel.dtd「,null), HotelStamm); string pathUTF8 = path.Replace(」。xml「,」-utf8.xml 「); 嘗試 { XmlImp.Save(pathUTF8);} 抓 (IOException異常ioEx)' –