Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Windows C++;_C++_.net_Windows_Temp - Fatal编程技术网

C++ 在Windows C++;

C++ 在Windows C++;,c++,.net,windows,temp,C++,.net,Windows,Temp,我有一个长时间运行的过程,创建一个小映像(~1-2 kb)并将其加载到内存中。因为它是使用APK创建的,所以我必须在将其加载到内存之前将其保存到文件中。在这一点上,我不再需要该文件。这个过程可能会创建数百万个这样的文件 我使用Visual C++ .NET,这是一个基于Windows的应用程序。我想知道最好的办法 我可以通过调用DeleteFile()来删除它们,但我想知道该操作是否有开销,是否应该使用通配符和命名约定每隔10k或100k文件执行一次 这值得付出努力吗?这里的权衡是什么 由于您没

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

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

我可以通过调用DeleteFile()来删除它们,但我想知道该操作是否有开销,是否应该使用通配符和命名约定每隔10k或100k文件执行一次


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

由于您没有提到任何数据完整性要求,而且您的临时文件非常小(~1-2 kb),加上有大量磁盘I/O,我会在服务器上重新创建映射,并使用该驱动器存储和检索映像


使用RAM驱动器的工作原理与辅助存储器(硬盘)类似,但实际上所有内容都存储在主存储器(RAM)中。这将加快所有(CRUD)I/O的速度,如创建文件、读取文件、写入文件和删除RAM中的文件。

这是不值得的。只需将文件放在用户的临时文件夹中,边走边删除这些文件,在紧急情况下(即应用程序崩溃时)不必关心遗留下来的文件。无论如何,它们都将通过系统的清理过程进行清理

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

  • 创建文件(打开进行写入)
  • 写文件
  • 读文件

  • “Delete”调用将是该链中的第四个调用,与首先创建文件一样简单。

    使用
    file\u ATTRIBUTE\u TEMPORARY
    file\u FLAG\u Delete\u ON\u CLOSE
    。它们一起准确地告诉Windows您打算如何使用此文件


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

    也许这个问题可以帮助您。嗯,在我读过这个文件后,我再也不需要它了,它是base64编码的,并被发送到另一个进程,我只需要一些关于删除数百万个文件的最佳方法的建议。也许把它们都放在一个目录中,然后在1次迭代中删除这个目录。嗯,DeleteFile没有通配符版本,因此,您声称的替代方案不存在。可能您可以使用一个新线程将文件删除到该特定目录中的所有文件中。Ram驱动器设置起来很麻烦,完全没有抓住要点。Windows有一个文件缓存,它提供完全相同的服务点(使用RAM代替磁盘)。@MSalters我只是想考虑OOTB,因为OP的问题是I/O效率。由于他也从未提及数据完整性,因此某种主存储(RAM)解决方案是IMO的发展方向——在这种情况下,RAM磁盘或文件缓存都很好。如果OP还可以控制创建文件的过程,那么您对手头问题的解决方案似乎比我的更受欢迎,如果他不这样做,则创建数百万个文件的开销很大,他仍然必须删除这些文件。您的解决方案要求操作员还使用
    FILE\u ATTRIBUTE\u TEMPORARY
    标志创建APK文件。如果OP可以控制创建图像文件的过程,那么这是最好的解决方案。然而,如果他不这样做,那么这就行不通了。