.net windows磁盘写缓存会导致文件丢失吗?

.net windows磁盘写缓存会导致文件丢失吗?,.net,windows,caching,disk,.net,Windows,Caching,Disk,下面的问题不是一个典型的编程问题,但是IMHO程序员会受到这个问题的影响,并且最有可能找到解决方案 我有一个与服务器通信的Windows桌面应用程序。客户端应用程序有一个可选的“脱机模式”功能(主要用于笔记本电脑),该功能通过在本地序列化DTO直到用户返回其LAN。DTO被序列化为加密的XML文件,在数据更改时写入(写入用户的[AppData]/AppName目录) 问题是,一些用户倾向于让应用程序保持打开状态,然后关闭笔记本电脑,直到它最终耗尽电池。当他们返回办公室时,笔记本电脑磁盘上的任何地

下面的问题不是一个典型的编程问题,但是IMHO程序员会受到这个问题的影响,并且最有可能找到解决方案

我有一个与服务器通信的Windows桌面应用程序。客户端应用程序有一个可选的“脱机模式”功能(主要用于笔记本电脑),该功能通过在本地序列化DTO直到用户返回其LAN。DTO被序列化为加密的XML文件,在数据更改时写入(写入用户的[AppData]/AppName目录)

问题是,一些用户倾向于让应用程序保持打开状态,然后关闭笔记本电脑,直到它最终耗尽电池。当他们返回办公室时,笔记本电脑磁盘上的任何地方都不存在XML文件

我已经对代码进行了无数次梳理,实现了各种writer/stream刷新、文件写入后的文件存在性/时间戳检查,等等,现在仍然在进行。我唯一能想到的是windows写缓存,它在XP、Vista和7上默认启用。是否知道它会导致此类问题,我如何在我的应用程序中防止它们(除了强制用户全局关闭写缓存之外)


我发现它似乎可以刷新磁盘缓存,但它需要我的用户没有的管理员权限。

我个人严重怀疑,除了极端情况外,任何磁盘缓存都可能延迟物理写入小文件超过几秒钟

我建议在序列化数据时记录一行,并检查它是否被写入;我相信你已经试过了