有效地删除文件Windows C ++

时间:2014-03-31 03:28:10

标签: c++ .net windows temp

我有一个长时间运行的过程,它创建一个小图像(~1-2 kb)并将其加载到内存中。因为它是使用APK创建的,所以我必须先将其保存到文件中,然后再将其加载到内存中。那时我不再需要这个文件了。该过程可能会创建数百万个这样的文件。

我使用的是Visual C ++ .NET,这是一个基于Windows的应用程序。我想知道解决这个问题的最佳方法。

我可以通过调用DeleteFile(http://msdn.microsoft.com/en-us/library/aa363915(v=vs.85).aspx)来删除它们,但我想知道该操作是否有开销,以及是否应该使用通配符和命名约定每10k或100k文件执行一次。< / p>

值得努力吗?这里的交易是什么?

3 个答案:

答案 0 :(得分:5)

使用FILE_ATTRIBUTE_TEMPORARYFILE_FLAG_DELETE_ON_CLOSE。他们一起告诉Windows你打算如何使用这个文件。

组合意味着Windows会将文件保留在文件缓存中,直到您关闭其句柄,此时它将从内存中删除。你甚至不需要DeleteFile!由于所有语义仍然是普通文件的语义,因此您无需更改任何其他内容。

答案 1 :(得分:4)

不值得努力。只需将文件放入用户的临时文件夹,随时删除文件,不要关心紧急情况下留下的文件(即应用程序崩溃时)。无论如何,它们将通过系统的清理过程进行清理。

原因:你已经做了很多IO:

  1. 创建文件(打开以供写入)
  2. 写文件
  3. 阅读文件
  4. &#34;删除&#34;调用只是链中的第四个 - 就像创建文件一样轻。

答案 2 :(得分:1)

由于您没有提到任何数据完整性要求,而且您的临时文件非常小(约1-2 kb),而且还有很多的磁盘I / OI会推荐映射a RAM Drive在服务器上并使用该驱动器来存储和检索图像。

使用RAM驱动器就像二级存储(Harddisk)一样,但实际上所有内容都存储在主存储器(RAM)中。这将加速所有(CRUD)I / O,如创建文件,从文件读取,写入文件以及删除文件,因为RAM具有a lot higher data throughput than a harddisk