我在我的应用程序中有以下代码,如本文末尾所示。
当目录C:\xyz\vb\
为空或文件很少时,代码很快,但我不确定它在高流量网站中是否仍会如此快,其中不仅有很多用户会访问此文件夹下的文件,但此文件夹下可能还有许多文件。没有两个用户可以同时访问同一个文件,但上面的文件夹中可能有数千个这样的用户文件。
问题:
以下代码中的每个方法 - ReadAllText
和WriteAllLines
如何执行搜索给定文件,并且随着文件数量的增加,读取和写入的速度会变慢?我最初的猜测是这些方法需要找到给定的文件,因此随着文件数量的增加会变慢。
//read a give file
string text = System.IO.File.ReadAllText(@"C:\xyz\vb\WriteText.txt");
//write to a given file
System.IO.File.WriteAllLines(@"C:xyz\vb\WriteLines.txt", lines);
答案 0 :(得分:2)
当您在C#中进行文件系统调用时,.NET Framework正在调用Windows OS API调用。意思是,C#没有“搜索”您正在请求的文件,它只是将您的请求传递给本机Windows API调用,后者又将其传递给文件系统。 NTFS在查找文件方面非常有效。它不会遍历目录。相反,它将文件存储在基于B树的索引中。这意味着找到您请求的文件几乎是即时的。可以这么说,一个包含几千个文件的目录由NTFS非常有效地处理。您会注意到它之间几乎没有区别,如果它是目录中唯一的文件。
有关NTFS如何进行索引的更深入解释,请参阅this link。