我为我的同事写了一个下载库。它将下载的数据写入文件。
我的同事发现该文件长时间保持较小,即使已下载100 Mb数据。
所以他们建议我应该在每flush()
之后调用write()
,这样就不会占用内存来缓冲这些数据。
但我不认为100 Mb的虚拟内存很多,并且认为Windows可能有理由缓冲这么多数据。
你怎么看?
答案 0 :(得分:4)
嗯,首先你应该调查/调试正在发生的事情。问题可能在其他地方;例如,Windows资源管理器可能无法足够快地刷新文件大小。
那就是说,你是对的,通常如果OS的VM系统决定在RAM中缓冲内容,它有充分的理由这样做,你通常不应该干涉。如果有大量的可用内存,毕竟使用它是有意义的。
答案 1 :(得分:4)
我相信操作系统会亲自调整自己。
至于“立即冲洗,以免在电源耗尽时丢失数据” - 如果电源在文件中途中断,你会相信你写的数据是否正常并从那里恢复下载?如果是这样的话,也许它值得提前淘汰 - 但是我会考虑恢复电力故障的相对稀缺性的复杂性,并在我阅读所有内容时关闭文件。如果您看到半个书面文件,请将其删除并从头开始重新下载。
答案 2 :(得分:2)
如果是我,我想确保所有数据尽快保存到非易失性位置。我肯定会冲洗流,以确保在发生电源故障时我没有丢失任何东西。您没有指定以后是否需要访问数据,但我认为有,否则您为什么要存储它? 尽管如此,要回答原始问题 - 它对操作系统并不“有害”,但您确实有丢失数据的风险。
答案 3 :(得分:2)
以某些特定的间隔/大小/行进行刷新可能是好的,而不是每次写入都要刷新。它有助于减少内存占用,并确保实际文件定期更新信息。例如,您可以每100行冲洗一次。
答案 4 :(得分:0)
如果有一种方法可以降低内存需求,而且性能影响可以忽略不计,那么我更喜欢不那么贪心的版本。我可能需要那些更重要的内存,而下载器的100Mb占用空间非常大。