我有几个类,它们查看目录和子目录,以检查这些文件夹和文件的结构是否符合类要求。例如。我有一个JPEG-Class,它在所有子目录中查找任何.jpeg。有些类甚至更复杂,其中一些目录和子目录需要具有特定的名称,并且应该包含一些具有指定扩展名的文件。
因此,我目前遇到的问题是我需要多次读取文件系统来进行这些计算,因为这些类有不同的要求,这些要求无法在一个循环中解决。
到目前为止我正在做的事情:我已经为每个类在Directory.GetFiles(path)
和Directory.GetDirectories(path)
的文件系统上实现了一个循环,并检查我的类是否可以读取该结构
我的问题是:如何改善我的表现。我认为如果我可以将文件系统(来自所选路径的目录和子目录)存储到我的内存中,可能会在树结构中避免多个文件系统调用,这将是一个很大的性能提升?这是最好的行为吗?或者你认为这不会带来性能提升?我还有其他方法可以对性能进行一些改进吗?
如果树是最佳解决方案 - 您将如何实现它?
public class TreeNode
{
List<TreeNode> nodes;
FileInfo currentFileInfo;
DirectoryInfo currentDirectoryInfo;
}
这个结构适合我的问题吗?
此致
答案 0 :(得分:1)
我通过先读取所有文件信息并稍后通过不同的类进行分析,成功地提高了性能。根据你的问题,是的,我建议你这样做。
我不知道你的“特定于文件类型”的类是如何工作的。但一般来说,如果你创建一个树作为数据结构,你将有一些工作来维护节点和遍历。
为什么不简单地创建List
,ArrayList
或Collection
和Hashtable
这样的元素:
ArrayList directoryInformation = new ArrayList();
...
...
Hashtable fileEntry = new Hashtable();
fileEntry.add("name", theFileName);
fileEntry.add("type", theFileType);
fileEntry.add("path", theFilePath);
...
...
directoryInformation.add (fileEntry);
构建列表后,您的类可以简单地遍历列表并从Hashtable
条目中获取所需的信息。此外,通过添加每个元素的路径,您可以展平树结构,因此您只需递归一次。
Hashtable
的唯一缺点是它没有输入,所以如果你添加一些错误的字符串,编译器就不会咳嗽。但它通过灵活和快速的写作来返回价值。