2015-03-31 43 views
0

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

编辑:我在分析数据库产品。我们看到RAM使用量突然减少。我通过了CloseHandle的MSDN,看到一行说“在对象的最后一个句柄关闭后,该对象被从系统中删除。”这个词系统这里不清楚。在关闭最后一个句柄之前,我们已经使用FlushFileBuffers()来保存数据。 由于数据库文件可能很大,FlushFileBuffers()可能会导致大量的磁盘I/O。能否将Windows Server用作虚拟机会降低磁盘I/O的性能?

+0

不,写入磁盘是懒惰的。不要乱用它,使用FlushFileBuffers()不是一个好主意。 – 2015-03-31 15:23:50

回答

1

关闭句柄不会(可靠地)刷新未写入的数据,也不会(通常)清除缓存的数据。这样做意味着将实际上有零缓存和懒惰回写的好处。

我观察到Windows急切地刷新和取消缓存文件,但这是比规则更多的例外。

+0

最后一个文件句柄也是一样的吗? – 2015-04-01 04:42:40

+0

是的。大多数缓存的文件没有打开的句柄。使用RAMMap查看文件缓存内容。 – usr 2015-04-01 08:47:18

0

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

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

相关问题