windows - 寻找一种有效的方法来使用 SAN 上的文件检查 Windows 上的文件是否存在

标签 windows file filesystems cygwin

我有一大组文件位于 Windows 2003 服务器上的一系列目录中。每个目录中有超过一百万个文件。 Windows 服务器使用 iSCSI 连接到 Equalogics SAN。

我有一个应用程序需要确定一组文件是否存在 - 该应用程序需要检查每个目录是否存在多达一百万个文件。

我已经尝试了多种技术/脚本语言,包括 perl、vbscript、dos 批处理文件,但我无法获得每秒超过 250 个文件检查。检查 800,000 个文件需要将近 50 分钟。我尝试对 perl 程序进行多线程处理以一次检查多个文件,但这没有帮助。

我还尝试使用 dir、ls、find(通过 cygwin)列出目录中的所有文件,它需要很多分钟才能开始输出任何文件名。无论如何,这不是一个好方法,因为文件比我实际需要检查的要多。

有没有办法强制 Windows 对目录进行“预读”,并将文件放入缓存?

有没有更好的方法来解决这个发现的问题?

最佳答案

出于您指定的原因,我可能会避免使用任何解释性语言,例如 VBScript 等 - 只是在性能有问题的情况下无法正常工作。

现在,作为我对我的建议的正式警告,我假设在预期的时间内,这样的应用程序将运行,这组预期文件(搜索目标)保持相对稳定,从而存在误报的风险由于扫描应用程序启动后发生的文件集更改而从应用程序进行检查的情况很少。

这并不优雅,但我至少建议探索一个 Win32(不是 .NET)控制台类型的应用程序,它递归地将目录树搜索到内存映射文件中,然后在该文件中搜索您需要的模式。这将磁盘访问限制为仅累积结果所需的努力,然后将搜索放在可能(快得多)的内存支持文件上。现在,我可能低估了文件集内容的大小和/或复杂性,但这就是我将提供的起点。

我建议使用 Win32 应用程序而不是 .NET 应用程序以避免框架运行时的开销,但适用于非托管应用程序的明显警告。

希望这对您有所帮助,或者至少能为您搅动一下。祝你好运。

关于windows - 寻找一种有效的方法来使用 SAN 上的文件检查 Windows 上的文件是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9780735/

相关文章:

windows - 编译和运行 GLSL 程序需要什么?

c++ - ifstream,getline返回一个内存地址

java - 多平台加密java移动存储系统的构想

android - 如何在 Android 文件系统中创建子文件夹

创建文件系统,需要 C 的建议

c++ - 如何知道自己在windows下是否有管理员权限?

windows - 在 Windows 8 中安装 Apache Maven

c - 如何使这个递归函数将其内容保存到链接列表中?

windows - 调用包含变量的 webrequest -body

php - 写入文件的输入可以被恶意篡改吗?