关闭文件上的句柄会释放Windows中的相关内存吗?

时间:2015-03-31 12:56:09

标签: windows winapi file-io operating-system virtual-machine

我正在分析Windows平台上的产品性能。是否使用CloseHandle()函数关闭该文件上的句柄将内容刷新到磁盘并将其从RAM中删除? Windows平台:Windows Server 2008 R2作为VM

编辑:我正在分析数据库产品。我们看到RAM使用率突然下降。我浏览了CloseHandle的MSDN并看到一行显示“关闭对象的最后一个句柄后,该对象将从系统中删除。”单词系统现在还不清楚。我们已经使用FlushFileBuffers()在关闭最后一个句柄之前保留数据。 由于数据库文件可能很大,FlushFileBuffers()可能会导致大量磁盘I / O.可以使用Windows Server作为VM降低磁盘I / O的性能吗?

2 个答案:

答案 0 :(得分:1)

关闭句柄不会(可靠地)刷新未写入的数据,并且(通常)不会清除缓存的数据。这样做意味着有效的零缓存和懒惰的回写优势。

我发现Windows急切地刷新和删除文件,但这比规则更为例外。

答案 1 :(得分:0)

避免调用FlushFileBuffers(),因为这会降低系统的性能,并且不能保证写入的持久性。

CloseHandle()适用于所有类型的句柄,而不仅仅是文件句柄。例如,CreateEvent()返回一个句柄。文档将这些类型的“对象”称为“从系统中删除”。文件,除非它们在关闭时被标记为删除,它们将在关闭后显然保留在文件系统中(显然)。