C# 为什么Directory.GetFiles()在后续运行时运行得更快?

C# 为什么Directory.GetFiles()在后续运行时运行得更快?,c#,performance,caching,execution,C#,Performance,Caching,Execution,我真的不知道是什么原因造成的,所以如果我在搜索中找不到我需要的信息,请原谅我。以下是一个例子: 假设我们有一个包含1000000个文件的文件夹。在上运行Directory.GetFiles()需要几分钟的时间。但是,之后立即再次运行它只需几秒钟。为什么会发生这种情况?对象是否缓存在某个地方?如何使用原始时间运行它?硬盘驱动器具有内部缓存,有助于加快后续读取。尝试读取完全不同扇区中的一组其他目录信息以清除缓存。因此,这不是.NET优化,而是HD?操作系统也可能将其缓存在RAM中。很难说到底是哪种缓

我真的不知道是什么原因造成的,所以如果我在搜索中找不到我需要的信息,请原谅我。以下是一个例子:


假设我们有一个包含1000000个文件的文件夹。在上运行Directory.GetFiles()需要几分钟的时间。但是,之后立即再次运行它只需几秒钟。为什么会发生这种情况?对象是否缓存在某个地方?如何使用原始时间运行它?

硬盘驱动器具有内部缓存,有助于加快后续读取。尝试读取完全不同扇区中的一组其他目录信息以清除缓存。

因此,这不是.NET优化,而是HD?操作系统也可能将其缓存在RAM中。很难说到底是哪种缓存级别使您在第二次读取时的读取速度如此之快。有没有办法找出是哪种缓存级别?我怎样才能知道哪些目录在不同的扇区中,这样我就可以测试它了?我对那些低级的东西不太了解。如果你想在另一个扇区中缓存一些东西,把一些非常大的文件(两个Gig)读入内存,然后在翻滚的过程中扔掉数据。