繁体   English   中英

有效地删除文件Windows C ++

[英]Delete Files Efficiently Windows C++

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

我正在使用Visual C ++。NET,这是一个基于Windows的应用程序。 我想知道最好的方法。

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

这值得付出努力吗? 这里的权衡是什么?

使用FILE_ATTRIBUTE_TEMPORARYFILE_FLAG_DELETE_ON_CLOSE 他们共同告诉Windows您打算如何使用此文件。

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

这是不值得的。 只需将文件放在用户的temp文件夹中,随手删除这些文件,就不用担心在紧急情况下(例如,应用程序崩溃)留下的文件。 无论如何,它们都将通过系统的清理过程进行清理。

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

  1. 创建文件(可写)
  2. 写文件
  3. 读取文件

“删除”调用将只在链中排第四-和创建第一个文件一样轻。

由于您没有提到任何数据完整性要求,并且您的临时文件非常小(〜1-2 kb),因此建议在服务器上映射RAM驱动器并使用该驱动器存储和存储大量磁盘I / OI。检索图像。

使用RAM驱动器的工作方式与辅助存储(硬盘)相同,但实际上所有内容都存储在主存储(RAM)中。 这将加快所有(CRUD)I / O的速度,例如创建文件,从文件读取,写入文件以及删除文件,因为RAM 比硬盘具有更高的数据吞吐量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM