我正在分析一个产品在Windows平台上的性能。会使用CloseHandle()函数关闭该文件的句柄,将内容刷新到磁盘并从内存中删除它吗?:Windows 2008 R2作为VM
编辑:我正在分析一个数据库产品。我们看到RAM的使用量突然减少。我查看了CloseHandle的MSDN,并看到了一行,其中写着“在关闭对象的最后一个句柄之后,对象被从系统中移除。”--这里的system这个词不清楚。在关闭最后一个句柄之前,我们已经使用FlushFileBuffers()来持久化数据。由于数据库文件可能很大,FlushFileBuffers()可以导致大量的磁盘I/O。使用Windows作为VM会降低磁盘I/O的性能吗?
发布于 2015-03-31 13:27:08
关闭句柄不会(可靠)刷新未写入的数据,也不会(通常)清除缓存的数据。这样做意味着将有效地实现零缓存和延迟回写的好处。
我观察到Windows急切地刷新和隐藏文件,但这是一个例外,而不是规则。
发布于 2015-04-08 04:42:00
避免调用FlushFileBuffers(),因为这会降低系统的性能,并且不能保证您的写操作的持久性。
CloseHandle()适用于所有类型的句柄,而不仅仅是文件句柄。例如,CreateEvent()返回句柄。文档将这些类型的“对象”称为“从系统中删除”。除非文件被标记为“关闭时删除”,否则文件在关闭后仍将保留在文件系统中(显然)。
https://stackoverflow.com/questions/29369199
复制相似问题