【发布时间】:2011-12-30 11:38:56
【问题描述】:
获取文件列表和反复搜索文件列表最快的方法是什么?
情况:
- 一个网络驱动器上可以有 5,000 到 35,000 个文件分布在 3 到 5 个根目录(包含许多子目录)中。
- 用户可能会或可能不会搜索三种文件类型(tif、sus、img)。某些文件类型可以有 2-3 个不同的文件扩展名。
- 从文件列表(在各种数据库表中),我需要找出每个文件是否存在,如果存在,则仅将路径和文件名保存到表中。
- 对文件名的搜索必须区分大小写,但在保存表的路径时最好保持原来的大小写。
环境:
Windows PC 上的 C# 和 .NET 4.0。
这是最快的方法吗?:
以 FileName 作为键(小写)和 Path 作为值(原始大小写)是使用字典的最快方法吗? 这样我在搜索文件名时可以同时获得索引/路径吗?填充列表时,文件名和路径在前面被拆分。
if (d.TryGetValue("key", out value))
{
// Log "key" and value to table // only does one lookup
}
注意:我有点担心每个 FileType 可能会有重复的键值。 何时/如果我遇到这种情况,我应该使用哪种类型的列表和访问方法?
也许在这些罕见的情况下,我应该填充另一个重复键的列表。因为我至少需要执行以下操作之一:记录/复制/删除任何路径中的文件。
【问题讨论】:
-
我可能会创建一个带有“FullFilePath”和“FileName”/“Path”吸气剂的对象,这些吸气剂从路径中提取这些细节。然后,创建可以迭代的那些对象的集合。 ——但这只是我。
-
@BradChristie 那么...
FileInfo类,然后呢? -
@SpikeX:我想过,但 FileInfo 可能对于元数据来说太重了。这取决于你想要表现什么。我几乎认为在 easily-searchable collection 中设置了一个愚蠢的结构
-
@BradChristie 但这就是 FileInfo 对象的全部内容,是元数据。它根本不存储文件的内容。它们被设计为非常轻量和快速,我已经使用 FileInfo 类处理了 数十万 个文件并且没有任何问题。 -- 不要重新发明轮子。 ;)
标签: c# dictionary