FileStream在应用程序冷启动上非常慢

如果您有兴趣,也可以在这里提出一个非常类似的问题,但是我们将会看到,这个问题的接受答案并非总是如此(我的应用程序使用模式从来就不是这样)。

性能确定代码由FileStream构造函数(打开文件)和SHA1哈希(.Net框架实现)组成。 代码几乎是C#版本的问题,我已经链接到上面的问题。

情况1:应用程序是第一次或第N次启动,但具有不同的目标文件集。 现在通知应用程序计算以前从未访问过的文件的散列值。

  • 〜50ms的
  • 80%的FileStream构造函数
  • 18%散列计算

情况2:应用程序现在已经完全终止,并重新启动,要求计算相同文件的哈希值:

  • 〜8ms的
  • 90%散列计算
  • 8%的FileStream构造函数

问题
我的应用程序总是在使用案例1 。 它永远不会被要求重新计算已经访问过一次的文件的散列。

所以我的速度决定步骤是FileStream构造函数! 有什么我可以做的,以加快这个用例?

谢谢。

PS Stats是使用JetBrains探查器收集的。

文件系统和/或磁盘控制器将缓存最近访问的文件/扇区。

速度确定步骤是读取文件,而不是构建FieStream对象,而当数据在缓存中时,在第二次运行时,速度会明显更快,这是完全正常的。

你应该尝试使用本地FILE_FLAG_SEQUENTIAL_SCAN ,你将不得不pinvoke CreateFile为了得到一个句柄,并将其传递给FileStream