gpt4 book ai didi

c# - 索引文件和在文件夹中查找文件的最快方法?

转载 作者:数据小太阳 更新时间:2023-10-29 02:32:35 26 4
gpt4 key购买 nike

我在 22 个文件夹中有 660000 个 xml 文件(具有唯一的文件名)。每个文件夹有 30000 个文件。我需要在 C# 应用程序中通过名称高效地找到它们。我知道 Windows(?Vista+?)中有一个 SearchIndexer 服务,我只是想知道我是否可以使用它,或者我必须自己为文件编制索引吗?

或者,我想我可以创建一个数据库,文件名作为主键和另一列中的路径。但是,我应该创建一个包含 660000 行的表还是创建 22 个每个包含 30000 行的表?为什么?

提前致谢。

最佳答案

我在这方面的经验可能已经过时 (NTFS),但您应该检查在包含 30,000 个文件的目录中打开文件的速度。我认为您可能会发现将文件分布在更多目录中会更好。

如果您可以控制目录布局,请考虑将文件名散列为 0 到 660000 之间的数字。然后您可以将文件系统用作索引:

00/
00/
<99 files that hash here>
..
65

您仍然需要编写一个简单的“索引器”来读取每个文件,计算它的哈希值并将其存储在正确的位置。然后你查找一个文件:

Lookup(string filename)
{
int hash = filename.GetHashCode() % 660000;
string directory = HashToDirectory(hash);
string path = Path.Combine(directory, filename);
...

这种方法的一个优点是您可以分析目录中文件数量的各种“密度”。您只需更改 HashToPath 函数。您也不需要数据库。

我们对存储大量文件的网络爬虫使用了类似的方法。它是针对 NTFS 的,所以 YMMV。

关于c# - 索引文件和在文件夹中查找文件的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3540257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com