.net 间歇XmlSerializer(部分)空文件

.net 间歇XmlSerializer(部分)空文件,.net,c#-4.0,xml-serialization,streamwriter,.net,C# 4.0,Xml Serialization,Streamwriter,我将XmlSerializer与StreamWriter一起使用,如下所示: ... string xmlFile = GetXMLLocation(objToSaveType); XmlSerializer Serializer = new XmlSerializer(objToSaveType); using (StreamWriter sw = new StreamWriter(xmlFile)) Serializer.Serialize(sw, objToSave); ...

我将XmlSerializer与StreamWriter一起使用,如下所示:

...
string xmlFile = GetXMLLocation(objToSaveType);
XmlSerializer Serializer = new XmlSerializer(objToSaveType);
using (StreamWriter sw = new StreamWriter(xmlFile))
    Serializer.Serialize(sw, objToSave);
...
这在绝大多数情况下都有效,但生成的文件很少会充满空字符,而且偶尔会以空字符结尾,例如

...
        <Extension>0</Extension>
      </OrderProductLine>
      <OrderProductLine>
        <ProductDescription />
        <Commission>0.3</Commission>
        <UnitType />
        <UnitPrice>0</UnitPrice>
        <UnitQuantity>0</UnitQuantity>
        <PackageType />
        <Extension>0</Extension>
   [null x ~1 million]
我有一些解决方法的想法(主要是在保存后立即反序列化、回滚或在出现问题时重试),但修复这个该死的问题会很好。因为它是如此间歇性,我还不知道上面的方法是否修复了它。这篇文章要么是告诉其他处于类似情况的人可能的解决方法,要么是获取其他可能原因的想法。谢谢你的阅读。(请注意,先发邮件,如果我违反了任何协议,请道歉!)

更新:一个多星期后,这个bug还没有再次出现。我祈求好运,不过我真的需要大约一个月的时间来确定这是否能解决问题

更新:两周半后,仍然很好


希望最终更新:一个多月后,仍然很好。缓存似乎毕竟是个问题,耶

我和一位同事谈了我们在应用程序中如何解决这个问题

我们在应用程序关闭时保存了一些xml数据,看起来有时将文件写入磁盘的线程会被应用程序关闭过程杀死


我们将save命令从应用程序关闭移到数据更改时。这为我们解决了问题。

我们也看到了这个错误;它主要发生在“现场”(我们注意到,当客户抱怨他们丢失了数据时)。你用的是哪个版本的.Net?实际上我试过了,但没有效果,这让我很惊讶。具体来说,我将shutdown save调用从应用程序退出事件移动到主启动屏幕的窗口关闭事件——应用程序的设置强制您通过这一个位置关闭。这是次优的,但在我的情况下正好有效。顺便说一句,它确实解决了另一个问题:在App_Exit中创建一个新窗口很少抛出错误。
string xmlFile = GetXMLLocation(objToSaveType);
XmlSerializer Serializer = new XmlSerializer(objToSaveType);
using (Stream file = new FileStream(xmlFile, FileMode.Create,
                         FileAccess.Write, FileShare.None,
                         0x1000, FileOptions.WriteThrough))
    using (StreamWriter sw = new StreamWriter(file))
        Serializer.Serialize(sw, objToSave);